Encoding and decoding video signals using dynamically generated quantization matrices

ABSTRACT

Video signals are encoded using quantization matrices generated based on one or more quantization matrix parameters that are contained in the encoded bit stream. Encoded video signals are decoded using quantization matrices generated using the one or more quantization matrix parameters that are contained in the encoded bit stream.

CROSS-REFERENCES TO RELATED APPLICATIONS

This is a continuation of application Ser. No. 08/234,973, filed on Apr.28, 1994, now U.S. Pat. No. 5,493,573 which is a continuation-in-part ofco-pending application Ser. No. 08/158,855, filed on Nov. 24, 1993, theentire disclosure of which is incorporated herein by reference.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates to video processing, and, in particular,to computer-implemented processes, apparatuses, and systems forcompressing and decompressing video signals for applications withlimited transmission, storage, and/or processing capacities.

2. Description of the Related Art

It is desirable to provide real-time video conferencing over aconferencing network in which each node in the network is a personalcomputer (PC) system. Each PC-based node transmits and receives videosignals with each other PC-based node over a communications link.Conventional communications links include, but are not limited to, alocal area network (LAN) or an integrated services digital network(ISDN) line.

Conventional communications links have finite transmission bandwidth. Inorder to provide video conferencing of sufficient quality, it isdesirable to apply compression processing to the video signals to reducethe amount of information used to represent each frame of the videostream for transmission. Decompression processing is then applied by thereceiving node to reconstruct each video frame for display.

In addition, conventional PC-based conferencing systems have finiteprocessing bandwidth in which to implement the video compression anddecompression processes. It is therefore further desirable to providevideo compression and decompression processes that may be implemented inreal time on PC-based conferencing systems to provide video conferencingof sufficient quality.

It is accordingly an object of this invention to provide computer-basedprocesses, apparatuses, and systems for performing video compression anddecompression processing to provide real-time video conferencing ofsufficient quality over a video conferencing network comprising nodes offinite processing bandwidth and communications links of finitetransmission bandwidth.

Further objects and advantages of this invention will become apparentfrom the detailed description of a preferred embodiment which follows.

SUMMARY OF THE INVENTION

The present invention is a computer-implemented process and apparatusfor encoding video signals. A plurality of quantization matrices aregenerated using one or more quantization matrix parameters. Videosignals are encoded using the quantization matrices to generate encodedvideo signals and an encoded bit stream is generated comprising theencoded video signals and the quantization matrix parameters.

The present invention is also a computer-implemented process andapparatus for decoding video signals. An encoded bit stream comprisingencoded video signals and one or more quantization matrix parameters isprovided. A plurality of quantization matrices are generated using thequantization matrix parameters and the encoded video signals are decodedusing the quantization matrices to generate decoded video signals.

BRIEF DESCRIPTION OF THE DRAWINGS

Other objects, features, and advantages of the present invention willbecome more fully apparent from the following detailed description ofthe preferred embodiment, the appended claims, and the accompanyingdrawings in which:

FIG. 1 is a block diagram representing real-time point-to-point videoconferencing between two PC systems, according to a preferred embodimentof the present invention;

FIG. 2 is a block diagram of the hardware configuration of theconferencing system of each PC system of FIG. 1;

FIG. 3 is a block diagram of the hardware configuration of the videoboard of the conferencing system of FIG. 2;

FIG. 4 is a top-level flow diagram of the processing implemented by thepixel processor of FIG. 3 to compress subsampled YUV9 video signals;

FIG. 5 is a representation of a preferred sequence of processing theblocks and macroblocks of each component plane of each video frameduring video encoding;

FIG. 6 is a representation of a preferred zig-zag scanning sequence forrun-length encoding for the processing of FIG. 4;

FIG. 7 is a representation of the motion estimation rules applied by thepixel processor of FIG. 3 during the encoding of video signals;

FIG. 8 is a process flow diagram of the processing of a preferred bitrate controller implemented by the pixel processor of FIG. 3 to selectthe quantization levels for encoding video signals to improve bit rateuniformity;

FIG. 9 is a graphical representation of the results of applying the bitrate controller of FIG. 8 to a typical sequence of video images;

FIG. 10 is a process flow diagram of the processing of an alternativepreferred bit rate controller implemented by the pixel processor of FIG.3 to select the quantization levels for encoding video signals toimprove bit rate uniformity;

FIG. 11 is a graphical representation of the results of applying the bitrate controller of FIG. 10 to a typical sequence of video images;

FIG. 12 is a process flow diagram of the processing implemented by thebit rate controllers of FIGS. 8 and 10 to determine when the encodershould drop a frame;

FIG. 13 is a process flow diagram of the processing of anotheralternative preferred bit rate controller implemented by the pixelprocessor of FIG. 3 to select the quantization levels for encoding videosignals to improve bit rate uniformity;

FIG. 14 is a process flow diagram of the processing implemented off lineto generate the mappings used by the bit rate controller of FIG. 13;

FIG. 15 is a representation of the bitstream format of the compressedvideo signals generated by the pixel processor of FIG. 3 and decoded bythe host processor of FIG. 2;

FIG. 16 is a representation of the bitstream format of the QuantDatasignal of the compressed video signal format of FIG. 15;

FIG. 17 is a representation of the bitstream format of each slice signalof the compressed video signal format of FIG. 15;

FIG. 18 is a process flow diagram of the processing implemented by thehost processor of FIG. 2 to decode each frame of the encoded videosignals generated by the pixel processor of FIG. 3;

FIG. 19 is a process flow diagram of the processing implemented by thehost processor of FIG. 2 to decode the macroblock signals for each sliceof each frame of encoded video signals;

FIG. 20 is a process flow diagram of the processing implemented by thehost processor of FIG. 2 to decode each run of macroblocks for eachslice of each frame of encoded video signals;

FIG. 21 is a process flow diagram of the processing implemented by thehost processor of FIG. 2 to decode the block signals for each slice ofeach frame of encoded video signals;

FIG. 22 is a process flow diagram of the processing implemented by thehost processor of FIG. 2 to decode each run-val pair for each block ofeach frame of encoded video signals;

FIG. 23 is a representation of a preferred partitioning scheme for each32-bit register for pseudo-SIMD inverse DST processing according to thepresent invention;

FIG. 24 is a representation of the preferred bias values correspondingto the (8×8) blocks of DST coefficients for the pseudo-SIMD inverse DSTprocessing of the present invention;

FIGS. 25 and 26 are representations of illustrative examples of theprocess of loading a 32-bit register with signals corresponding to theDC coefficients of two (8×8) blocks;

FIG. 27 is a representation of the 32-bit total column complexity maskthat is used to characterize the "zero-ness" of the (8×8) blocks of DSTcoefficients;

FIG. 28 is a representation of an illustrative example of an (8×8) blockof DST coefficients;

FIG. 29 is a representation of the eight 4-bit column complexity masksthat comprise the total column complexity mask corresponding to the(8×8) block of FIG. 28;

FIG. 30 is a process flow diagram of the processing implemented by thehost processor of FIG. 2 to apply the inverse DST in a pseudo-SIMDfashion to two different (8×8) blocks of DST coefficients during thedecoding of encoded video signals of FIG. 21;

FIG. 31 is a representation of the four block edges between an (8×8)block of components and its four neighboring blocks;

FIG. 32 is a process flow diagram of bit/byte pointer update processing,according to a preferred embodiment of the present invention; and

FIG. 33 is a process flow diagram of the processing of the decoderimplemented by the host processor of FIG. 2 to decode Huffman-encodedvideo signals.

DESCRIPTION OF THE PREFERRED EMBODIMENT(S) Point-To-Point ConferencingNetwork

Referring now to FIG. 1, there is shown a block diagram representingreal-time point-to-point video conferencing between two PC systems,according to a preferred embodiment of the present invention. Each PCsystem has a conferencing system 100, a camera 102, and a monitor 106.The conferencing systems communicate via an integrated services digitalnetwork (ISDN) line 110. Each conferencing system 100 receives,digitizes, and compresses the analog video signals generated by camera102. The compressed digital video signals are transmitted to the otherconferencing system via ISDN line 110, where they are decompressed andconverted for display in a window on monitor 106. Each conferencingsystem 100 may also display the locally generated video signals in aseparate window on monitor 106 for monitoring of the local videoprocessing.

Camera 102 may be any suitable camera for generating NTSC or PAL analogvideo signals. Those skilled in the art will understand that, inalternative embodiments of the present invention, camera 102 may bereplaced by any other suitable source of unencoded video signals, suchas a VCR for playing back recorded unencoded video signals or an antennaor cable for receiving unencoded video signals from a remote location.Monitor 106 may be any suitable monitor for displaying video andgraphics images and is preferably a VGA monitor.

Conferencing System Hardware Configuration

Referring now to FIG. 2, there is shown a block diagram of the hardwareconfiguration of each conferencing system 100 of FIG. 1, according to apreferred embodiment of the present invention. Each conferencing system100 comprises host processor 202, video board 204, communications board206, and ISA bus 208.

Referring now to FIG. 3, there is shown a block diagram of the hardwareconfiguration of video board 204 of FIG. 2, according to a preferredembodiment of the present invention. Video board 204 comprises industrystandard architecture (ISA) bus interface 310, video bus 312, pixelprocessor 302, video random access memory (VRAM) device 304, videocapture module 306, and video analog-to-digital (A/D) converter 308.

Video Signal Processing

Referring to FIGS. 2 and 3, software running on host processor 202provides the top-level local control of video conferencing between alocal conferencing system (i.e., local site, local node, or localendpoint) and a remote conferencing system (i.e., remote site, remotenode, or remote endpoint). Host processor 202 controls local videosignal processing and establishes links with the remote site fortransmitting and receiving audio and video signals over the ISDN.

During video conferencing, video A/D converter 308 of video board 204digitizes analog video signals received from camera 102 and transmitsthe resulting digitized video to video capture module 306. Video capturemodule 306 decodes the digitized video into YUV color components anddelivers subsampled digital YUV9 video bitmaps to VRAM 304 via video bus312. Video microcode running on pixel processor 302 compresses thesubsampled video bitmaps and stores the resulting compressed videosignals back to VRAM 304. ISA bus interface 310 then transmits via ISAbus 208 the compressed video to host processor 202. Host processor 202transmits the compressed video signals to communications board 206 viaISA bus 208 for transmission to the remote site over ISDN line 110.

In addition, communications board 206 receives from ISDN line 110compressed video signals generated by the remote site and transmits thecompressed video signals to host processor 202 via ISA bus 208. Hostprocessor 202 decompresses the compressed video signals and transmitsthe decompressed video to the graphics device interface (GDI) (notshown) of the operating system (for example, Microsoft® Windows) foreventual display in a display window on monitor 106.

Those skilled in the art will understand that, if there is sufficientprocessing bandwidth, the video compression processing of the presentinvention may alternatively be implemented in a host processor such ashost processor 202. Similarly, the video decompression processing of thepresent invention may alternatively be implemented in a pixel processorsuch as pixel processor 302.

Preferred Hardware Configuration for Conferencing System

Referring again to FIG. 2, host processor 202 may be any suitablegeneral-purpose processor and is preferably an Intel® processor such asan Intel® i486™ or Pentium™ microprocessor. Host processor 202preferably has at least 8 megabytes of host memory. Bus 208 may be anysuitable digital communications bus and is preferably an IndustryStandard Architecture (ISA) PC bus. Communications board 206 may be anysuitable hardware/software for performing communications processing forconferencing system 100.

Referring again to FIG. 3, video A/D converter 308 of video board 204may be any standard hardware for digitizing and decoding analog videosignals that are preferably NTSC or PAL standard video signals. Videocapture module 306 may be any suitable device for capturing digitalvideo color component bitmaps and is preferably an Intel® ActionMedia®II Capture Module. Video capture module 306 preferably captures video assubsampled 4:1:1 YUV bitmaps (i.e., YUV9 or YVU9). Memory 304 may be anysuitable computer memory device for storing data during video processingsuch as a random access memory (RAM) device and is preferably a videoRAM (VRAM) device with at least 1 megabyte of data storage capacity.Pixel processor 302 may be any suitable processor for compressing videodata and is preferably an Intel® pixel processor such as an Intel® i750®Pixel Processor. Video bus 312 may be any suitable digitalcommunications bus and is preferably an Intel® DVI® bus. ISA businterface 310 may be any suitable interface between ISA bus 208 andvideo bus 312, and preferably comprises three Intel® ActionMedia® GateArrays and ISA configuration jumpers.

Video Signal Encoding

Referring now to FIG. 4, there is shown a top-level flow diagram of theprocessing implemented by pixel processor 302 of FIG. 3 to compress(i.e., encode) the subsampled YUV9 video signals generated by videocapture module 306 and stored to VRAM 304, according to a preferredembodiment of the present invention. YUV9 video signals comprisesequences of video frames having three planes of 8-bit component signals(Y, U, and V) with U and V subsampled by 4× in both directions. Thus,for every (4×4) block of Y component signals, there is one U componentsignals and one V component signal.

Pixel processor 302 preferably encodes each component planeindependently for each video frame with no grouping or interleaving ofthe component signals. The component planes are preferably encoded inthe order Y, V, and U. For purposes of encoding, each component plane issubdivided into a grid of (16×16) macroblocks. Each macroblock isfurther divided into a set of four (8×8) blocks.

Each component plane may be divided into one or more slices, where eachslice comprises a integer number of rows of macroblocks. A slice may notspan different component planes. The segmentation of component planesinto slices may be dictated by such parameters as the transmissionbandwidth and reliability of the communications line between nodes inthe conferencing network, the processing bandwidth of decoders, and thevideo quality requirements of the video conferencing. These factorscontribute to the selection of numbers of rows of macroblocks to beencoded into a single slice.

Referring now to FIG. 5, there is shown a representation of a preferredsequence of processing the blocks and macroblocks of each componentplane of each video frame during encoding (and decoding). Themacroblocks of each component plane are traversed in raster-scan orderstarting at the top-left corner (i.e., macroblock i+1 immediatelyfollowing macroblock i and macroblock j+1 immediately followingmacroblock j), while the blocks within each macroblock are processed inthe order top-left (block 1), bottom-left (block 2), bottom-right (block3), and top-right (block 4). As a result, for adjacent macroblocks i andi+1, block 4 of macroblock i is adjacent to block 1 of macroblock i+1.

If the width (i.e., number of columns) of a component plane is notevenly divisible by 16, then partial macroblocks are preferably added atthe right edge of the plane. Similarly, if the height (i.e., number ofrows) of a component plane is not evenly divisible by 16, then partialmacroblocks are preferably added at the bottom edge of the plane. Ifeither dimension is not evenly divisible by 8, then partial blocks arepreferably added at the appropriate edges.

The encoder (i.e., preferably pixel processor 302 of FIG. 3) preferablyencodes partial blocks by padding them out to the full (8×8) size (usinga selected method such as replicating the last column or row). Theresulting padded blocks are encoded as if they were originally fullblocks. The decoder (i. e., preferably host processor 202 of FIG. 2)reconstructs an original partial block by decoding the full (8×8) paddedblock and then saving only the appropriate partial block to the finalimage bitmap in memory. The decoder determines the location and size ofpartial blocks from the image dimensions which are encoded in thecompressed video signal, as described in further detail later in thisspecification in conjunction with FIG. 15.

Blocks that are part of partial macroblocks but which lie completelyoutside the image are called "phantom blocks." Phantom blocks arepreferably not encoded and are therefore not processed by the decoder.

Referring again to FIG. 4, the encoder begins video signal encoding forthe current input frame by performing motion estimation (step 402 ofFIG. 4). Motion estimation generates a motion vector for each (16×16)macroblock of each component plane of the current frame. The motionvector specifies the (16×16) macroblock of the reference frame that mostclosely matches the macroblock of the current frame (within specifiedranges of allowable motion). The reference frame (i.e., companded frame)is the result of compressing and expanding the previous input frame.Motion estimation is described in further detail later in thisspecification in the section entitled "Motion Estimation."

After motion estimation, each macroblock is classified as to whether itis to be encoded as an inter macroblock or an intra macroblock (step404). An inter macroblock is encoded with respect to the correspondingmotion-compensated macroblock of the reference frame. An intramacroblock is not encoded with respect to any previous frame. Theclassification of macroblocks as inter and intra is described in furtherdetail later in this specification in the section entitled "MacroblockClassification."

After macroblock classification, a temporal pre-filter is applied to thecurrent input frame (step 406). The temporal pre-filter is described infurther detail later in this specification in the section entitled"Temporal Pre-Filtering."

After temporal pre-filtering, a quantization level is selected for eachmacroblock (step 408). The quantization level identifies thequantization table used in quantization (step 416), as described below.Selection of quantization level is described in further detail later inthis specification in the section entitled "Quantization LevelSelection."

Block subtraction is then applied to all those (8×8) blocks that arepart of macroblocks to be encoded as inter macroblocks (step 410). Blocksubtraction involves generating the differences between the componentsof a temporally pre-filtered block of the current frame and thecorresponding components of the corresponding motion-compensated blockof the reference frame.

A forward discrete slant transform (FDST) is then applied (step 412).For inter blocks, the FDST is applied to the component differencesgenerated during block subtraction. For intra blocks, the FDST isapplied to the temporally pre-filtered component values. The forward(and inverse) discrete slant transforms are described in further detaillater in this specification in the section entitled "Discrete SlantTransform." The result of applying the FDST to an (8×8) block in thepixel component domain is an (8×8) block of DST coefficients in thespatial frequency domain.

If the current block is an intra block, then the DC coefficient (i.e.,the (0,0) DST coefficient in the (8×8) block) is encoded as a predictedvalue with respect to prevDC, where prevDC is the DC coefficient of theprevious intra block in the current slice (following the block scanningsequence of FIG. 5) (step 414). The value that is encoded is thedifference between the DC coefficient for the current block and prevDC.The value of prevDC is preferably initialized to 8*64 or 512 at thestart of each image slice. Those skilled in the art will understand thatthis preferred initial value for prevDC represents the gray level midwaybetween 0 and 127, times 8 (to scale the integer arithmetic to allowthree fractional bits).

Quantization is then applied to the blocks of DST coefficients (step416) using the quantization table previously selected for the currentblock (in step 408) the current DST coefficient. Those skilled in theart will understand that, for typical blocks of YUV video componentsignals, many of the 64 DST coefficients are close enough to zero to berepresented in the compressed video bitstream as zero withoutsignificant loss of video quality at playback. Quantization is describedin further detail later in this specification in the section entitled"Quantization."

After quantization, the quantized DST coefficients are run-lengthencoded using the zig-zag scan sequence represented in FIG. 6 (step418). The quantized DST coefficients are run-length encoded as run-valpairs comprising a run of sequential zero DST coefficients followed by anon-zero quantized DST coefficient. Common run-val pairs may be furtherencoded as a single value that represents an index to a run table and aval table.

The run-val pairs (or run-val table indices) are then variable-lengthencoded using Huffman encoding (step 420) to generate the block signalsof the encoded video bitstream. Huffman encoding is also used to encodethe macroblock signals of the encoded video bitstream. Variable-lengthencoding are described in further detail later in this specification inthe section entitled "Variable-Length Encoding." The resulting Huffmanencoded signals for the macroblocks and blocks are then combined withslice and picture header signals to form the compressed video bitstream.The compressed video bitstream format is described in further detaillater in this specification in the section entitled "Compressed VideoSignal Format."

A reference frame is generated corresponding to the current input framefor use in encoding the next input frame. The reference frame isgenerated by decoding the encoded video frame corresponding to thecurrent input frame. Since zig-zag run-length encoding (step 418 of FIG.4) and Huffman encoding (step 420) are lossless procedures (i.e., noinformation is lost), generation of the reference frame preferablybegins with the quantized DST coefficients (generated at step 416).

The quantized DST coefficients are dequantized (step 422), the DCprediction for intra blocks is undone (step 424), and the inversediscrete slant transform (IDST) is applied to the resulting dequantizedDST coefficients (step 426). If the block was encoded as an inter block,then block addition is performed to add the IDST results to thecorresponding motion-compensated block of the previous reference frame(step 428). If the block was encoded as an intra block, then no blockaddition is performed. In either case, clamping is performed (step 430)and a temporal post-filter (corresponding to the temporal pre-filter) isapplied to the clamped results (step 432). Clamping limits the signalsto be within a specified range, preferably between 8 and 120, inclusive.Temporal post-filtering is described in further detail later in thisspecification in the section entitled "Temporal Post-Filtering." Theoutput of the temporal post-filter is the reference frame used to encodethe next input frame.

Those skilled in the art will understand that, in alternative preferredembodiments, the reference frame may be generated from the encoded videoframe by pixel processor 302 or by host processor 202.

Motion Estimation

As described above in reference to step 402 of FIG. 4, the encoderperforms motion estimation to identify, for each (16×16) targetmacroblock of the current image, a (16×16) macroblock from the referenceimage that matches (relatively closely) the target macroblock. Ingeneral, the encoder implements motion estimation as a three-step logsearch to identify a motion vector within a specified pixel range of thecurrent macroblock. According to a preferred embodiment, the pixel rangeis specified as +/-7 pixels in the horizontal and vertical directions.

Motion estimation preferably is based on the sum of absolute differences(SAD(i,j)) between the component signals of the target macroblock andthe component signals of the macroblock in the reference framecorresponding to the motion vector (i,j). In a preferred embodiment,only 64 of the possible 256 component differences are used to computethe SAD. These 64 differences preferably correspond to every other rowand every other column starting at one corner of the (16×16) macroblock.

A preferred three-step log search is implemented for each targetmacroblock of the current image as follows:

(1) Compute SAD(0,0) between the target macroblock and the macroblock inthe reference image corresponding to a motion vector of (0,0).

(2) If SAD(0,0) is less than a specified threshold (preferably 192(corresponding to an average component difference magnitude of 3 for the64 differences)), then select (0,0) as the motion vector for the targetmacroblock and terminate motion estimation for the current targetmacroblock.

(3) Otherwise, compute SAD(i,j) between the target macroblock and themacroblocks in the reference image corresponding to the motion vectors(-4,-4), (0,-4), (4,-4), (-4,0), (4,0), (-4,4), (0,4), and (4,4).

(4) Select the position (i₁,j₁) with the lowest SAD(i,j) among all nineSAD(i,j) (including SAD(0,0).

(5) Compute SAD(i,j) between the target macroblock and the macroblocksin the reference image corresponding to the motion vectors (i₁ -2,j₁-2), (i₁ -2,j₁), (i₁ -2,j₁ +2), (i₁,j₁ -2), (i₁, j₁ +2), (i₁ +2,j₁ -2),(i₁ +2,j₁), (i₁ +2,j₁ +2).

(6) Select the position (i₂,j₂) with the lowest SAD(i,j) among the lastnine SAD(i,j) (including SAD(i₁,j₁).

(7) Compute SAD(i,j) between the target macroblock and the macroblocksin the reference image corresponding to the motion vectors (i₂ -1,j₂-1), (i₂ -1,j₂), (i₂ -1,j₂ +1), (i₂,j₂ -1), (i₂,j₂ +1), (i₂ +1,j₂ -1),(i₂ +1,j₂), (i₂ +1,j₂ +1).

(8) Select the position (i₃,j₃) with the lowest SAD(i,j) among the lastnine SAD(i,j) (including SAD(i₂,j₂) as the motion vector for the targetmacroblock and terminate motion estimation for the current targetmacroblock.

This method of motion estimation involves (at most) 25 SAD computationsfor each target macroblock. Those skilled in the art will understandthat other constraints may be imposed on motion estimation to limit thenumber of SAD computations in the above procedure. For example, targetmacroblocks near the edges of a slice have a reduced number of SADcomputations. Additional constraints on motion estimation may be imposedto promote error recovery as described in the next section of thisspecification.

Motion Estimation Rules to Provide Error Recovery

In a preferred embodiment of the present invention, each frame in asequence of video frames has one row of macroblocks in the Y componentplane that is encoded entirely as intra blocks. The position (within theY component plane) of the macroblock row that is intra encoded changesfrom frame to frame in an orderly cyclical manner (e.g., from top tobottom and then jump back to top). For (160×120) frames (i.e., 160columns and 120 rows), it takes 8 frames for the intra-encodedmacroblocks to cycle through the possible positions. During the 8-framecycling period of this example, the entire U component plane of one ofthe 8 frames and the entire V component plane of one of the remaining 7frames are intra encoded. Those skilled in the art will understand thatone reason for implementing this cyclical intra encoding is to refreshperiodically all the pixel locations with intra encoded signals, whileattempting to maintain relatively uniform bit rates over the videostream.

In a video conferencing network, frames (or portions of frames) may belost or corrupted during transmission from one node to another, or as aresult of CPU cycle bottlenecks. For encoded video signals in which someof the macroblocks of each image may be encoded as inter macroblocks,straightforward cyclical intra encoding does not ensure automaticrecovery from such errors. Those skilled in the art will understand thaterror recovery may not be achieved if motion compensation causes "good"macroblocks (i.e., those macroblocks ultimately based only on intramacroblocks decoded after the error) to become corrupted by "bad"macroblocks (i.e., those macroblocks not ultimately based only on intramacroblocks decoded after the error).

Referring now to FIG. 7, there is shown a representation of the generalmotion estimation rules applied by pixel processor 302 of FIG. 3 duringthe encoding of a Y component plane of a frame j of a sequence of videoframes, according to a preferred embodiment of the present invention.The preferred general motion estimation rules may be summarized asfollows:

For frame j, image region i (comprising one or more rows of macroblocks)is the cyclical intra-encoded image region:

ME Rule (A) For all of the target macroblocks in image region i-1 (whereimage region i-1 is the image region immediately above image region iand has the same number of rows of macroblocks as image region i),motion estimation may consider only those reference macroblocks withinimage region i-1 of the reference frame j-1 (i.e., the companded framecorresponding to the previous frame j-1).

ME Rule (B) For each of the other image regions k (having the samenumber of rows of macroblocks as image region i), the target macroblocksof image region k (1) may not have motion vectors that correspond toimage regions above image region k of the reference frame j-1 and (2)may not have motion vectors that correspond to image region i of thereference frame j-1.

These preferred rules ensure automatic error recovery within a finiterecovery period, when the intra encoding cycles from frame to frame intop-to-bottom order. The finite recovery period is equal to theintra-encoding cycling period.

Those skilled in the art will understand that motion estimation underthe above rules for error recovery will be affected by the edges of theY component plane, the number of rows of macroblocks per intra-encodedimage region, and the limitations on range of allowable motion vectors.In a preferred embodiment, each intra-encoded image region has only onerow of macroblocks and the allowable motion vectors are limited to +/-7pixels in the horizontal and vertical directions.

Those skilled in the art will also understand that the preferred motionestimation rules ensure that, during the error recovery period, no partof the image that recovers (via the cyclical intra-encoded rows) becomescorrupted again. To provide faster error recovery (at the expense of ahigher average bit rate), the number of rows of macroblocks in theintra-encoded image region may be increased.

The motion compensation rules of the present invention, along with thecyclical intra encoding, also ensure accurate decoding of encoded videosignals within a finite initialization period at the beginning of anetworking session and for video conferencing nodes that join anetworking session already in progress.

Macroblock Classification

As described above in reference to step 404 of FIG. 4, the encoderperforms macroblock classification to decide, for each macroblock,whether the macroblock should be intra coded or inter coded. In apreferred embodiment, each target macroblock in the current image isclassified as follows:

(1) Calculate

InterSAD=sum of c(i,j)-p(i,j)

where c(i,j) are all of the component signals for the target macroblockand p(i,j) are all of the component signals for the motion-compensatedmacroblock of the reference frame (identified during the motionestimation of step 402).

(2) Calculate

IntraSAD=sum of c(i,j)-C

where C is the average value of all of the components of the targetmacroblock.

(3) If InterSAD is less than IntraSAD, then classify target macroblockas an inter macroblock.

(4) Else if InterSAD is less than a specified threshold (preferably 1024(corresponding to an average component difference magnitude of 4 of the256 differences)), then classify target macroblock as an intermacroblock.

(5) Otherwise classify target macroblock as an intra macroblock.

Step (4) forces a macroblock with a relatively small InterSAD to beinter encoded. Those skilled in the art will understand that this helpsprevent artifacts that may occur when macroblocks in non-moving parts ofthe image are intra encoded.

Temporal Pre-Filtering

As described above in reference to step 406 of FIG. 4, the encoderapplies temporal pre-filtering to the current frame. In a preferredembodiment, temporal pre-filtering is applied only to the Y-componentintra macroblocks and is represented by the following equation:

    c'={c+(p-c+(1<<s))}>>(s+1)

where c is a Y component of an intra macroblock of the current frame, pis the corresponding non-motion-compensated Y component of the referenceframe, and s is the temporal filter strength. The temporal filterstrength s may be either 1, 2, or 3, where s=1 corresponds to taking 1/4of the reference image, s=2 corresponds to taking 1/8 of the referenceimage, and s=3 corresponds to taking 1/16 of the reference image.

In a preferred embodiment, the temporal pre-filter is identical to thetemporal post-filter. Those skilled in the art will understand that,since the encoder does not have to match the decoder, the temporalpre-filter may be optimized somewhat by eliminating the (1<<s) roundingterm from the above equation.

Quantization Level Selection and Bit Rate Control

It is desirable in video conferencing systems to generate encoded videosignals in which the number of bits per frame is constant. When thenumber of bits per frame is constant, the bit rates for transmittingencoded video signals will be uniform. Uniform bit rates promotesefficient use of available finite transmission bandwidth which in turnpromotes reliable transmission for more accurate video conferencingsessions. Variable bit rates may result in frame dropping, which mayhave a severe impact on the quality of the video display.

Those skilled in the art will understand that the number of bits pervideo frame may be controlled to some extent by adjusting the level ofquantization applied when encoding the video signals.

A Preferred Bit Rate Controller

Referring now to FIG. 8, there is shown a process flow diagram of theprocessing of bit rate controller 800 implemented by pixel processor 302of FIG. 3 to select the quantization levels for encoding video signalsof each component plane to improve bit rate uniformity, according to apreferred embodiment of the present invention. Bit rate controller 800of FIG. 8 operates at the macroblock level for each component plane byadjusting the quantization level for each macroblock to attempt tominimize buffering, thereby improving bit rate uniformity.

The processing of bit rate controller 800 begins by generating the sumof absolute differences SAD (i) for each macroblock i of the currentcomponent plane (step 802 of FIG. 8). Those skilled in the art willunderstand that, for inter-encoded macroblocks, SAD(i) is preferably thesum of the absolute values of the differences between the componentsignals of the current macroblock and the corresponding componentsignals of the corresponding motion-compensated macroblock from thereference frame. For intra-encoded macroblocks, SAD(i) is preferably thesum of the absolute values of the differences between the componentsignals of the current macroblock and the average component signal ofthe current macroblock.

For bit rate controller 800, buffering is characterized by the buffercontent C_(b) of a virtual buffer. For macroblock i, the buffer contentC_(b) (i) is generated (in step 804) using the following Equation (1):

    C.sub.b (i)=C.sub.b (i-1)+K.sub.1 [B.sub.u (i-1)-B.sub.t (i)],(1)

where:

C_(b) (i-1) is the previous buffer content;

B_(u) (i-1) is the actual number of bits used to encode the previousmacroblock i-1;

K₁ is a specified constant that is less than or equal to 1 (andpreferably equal to 1); and

B_(t) (i) is the target number of bits for the current macroblock i.

For uniform bit distribution over the macroblocks, the target number ofbits for the current macroblock, B_(t) (i) is preferably calculated as aspecified target number of bits for the current component plane dividedby the number of macroblocks in the current component plane. Thespecified target number of bits for the current component plane is afunction of the transmission bandwidth, the number of frames per second,and the subsampling ratio for the component. For example, for videoconferencing at 10 frames per second over ISDN lines with a transmissionbandwidth of 90 Kbits/sec allocated for video, 9 Kbits are allocated pervideo frame. For YUV9 video signals with 16:1:1 YUV subsampling, thetarget numbers of bits per component plane are 8 Kbits for Y and 0.5Kbits for U and V. The number of bits used B_(u) (i-1) is preferablyinitialized to the target number of bits B_(t) (i) at the beginning ofthe video stream. Bit distribution over the macroblocks may also benon-uniform.

A different buffer content C_(b) (i) is maintained for each of the videocomponents Y, U, and V. These buffer contents C_(b) (i) are preferablyinitialized to 5000, 500, and 500 for Y, U, and V, respectively, at thebeginning of the video stream. In general, the initial buffer contentvalues may be determined (and optimized) empirically. Those skilled inthe art will understand that the buffer content C_(b) (i) is thecumulative net differential between the target number of bits for themacroblocks and the actual number of bits used.

The buffer content C_(b) (i) is then used to generate the unscaledquantization level Q_(u) (i) for the current macroblock i (in step 806)using the following Equation (2): ##EQU1##

The normalized activity index I_(na) (i) for the current macroblock i isgenerated (in step 808) using the following Equation (3): ##EQU2## whereC is a specified constant (preferably 2), MA(i) is a macroblock activitymeasure for the current macroblock i, and MA_(ave) is the averagemacroblock activity measure of the entire component plane. In apreferred embodiment, the macroblock activity measure MA is the sum ofabsolute differences SAD. In alternative preferred embodiments, themacroblock activity measure MA may be some other activity measure, suchas mean absolute difference, mean square error, or sum of square errors.The normalized activity index I_(na) (i) is a measure of the relativevariation with the signals used to encode the current macroblock i.

The scaled quantization level Q(i) is then generated for the currentmacroblock i (in step 810) using the following Equation (4):

    Q(i)=I.sub.na (i)*Q.sub.u (i).                             (4)

The scaling of Equation (4) allows well-predicted inter-encodedmacroblocks and uniform intra-encoded macroblocks (i.e., those withsmall SADs) to be quantized finely, while poorly-predicted inter-encodedmacroblocks and variegated intra-encoded macroblocks (i.e., those withlarge SADs) to be quantized coarsely.

If the magnitude of the difference between the scaled quantization levelQ(i) for the current macroblock i and the scaled quantization levelQ(i-1) for the previous macroblock i-1 is greater than a specifiedthreshold D, then the scaled quantization level Q(i) is adjusted (instep 812) according to Equation (5) as follows:

    Q(i)=Q(i-1)+[D*SIGN(Q(i)-Q(i-1))],                         (5)

where: ##EQU3## Step 812 limits the magnitude of the change inquantization level from macroblock to macroblock. Those skilled in theart will understand that step 812 is a filter designed to reduceoscillations in quantization levels. Step 812 also hard limits thequantization level Q(i) to between 0 and 15, inclusive.

The quantization level Q(i) after step 812 is the quantization levelused to encode the current macroblock i. A quantization level Q(i) of 15corresponds to the coarsest quantization, while a quantization levelQ(i) of 0 corresponds to the finest quantization.

Referring now to FIG. 9, there is shown a graphical representation ofthe results of applying bit rate controller 800 of FIG. 8 to a typicalsequence of video images. In FIG. 9, the X axis is frame number and theY axis is bytes per frame. The horizontal line at 1125 bytes per framecorresponds to the ideal uniform bit rate for a video sequence with aframe rate of 10 frame per second over a transmission line with abandwidth of 90 kilobits per second.

As shown in Equation (1), bit rate controller 800 of FIG. 8 generatesthe buffer content C_(b) (i) based upon the actual number of bits usedB_(u) (i-1) to encode the previous macroblock i-1. This implies that theprevious macroblock i-1 is completely encoded before selecting thequantization level for the current macroblock i. Bit rate controller 800may be implemented in a vertical implementation of an encoder in whichthe encoder fully encodes each macroblock before starting to encode thenext macroblock. Those skilled in the art will understand that suchvertical encoding may be inefficient.

In a preferred embodiment, the processing implemented by pixel processor302 of FIG. 3 to encode video signals is implemented horizontally,whereby the encoder performs one operation for all the macroblocks inone component plane before starting the next operation. In such ahorizontal implementation, the actual number of bits used B_(u) (i-1) toencode the previous macroblock i-1 may not be available when the encoderselects the quantization level for encoding the current macroblock i.Bit rate controller 1000 of FIG. 10 solves this problem by using anestimate of the actual number of bits used when generating the buffercontent C_(b) (i).

An Alternative Preferred Bit Rate Controller

Referring now to FIG. 10, there is shown a process flow diagram of theprocessing of bit rate controller 1000 implemented by pixel processor302 of FIG. 3 to select the quantization levels for encoding videosignals for a group of macroblocks (e.g., a slice of a component plane)to improve bit rate uniformity, according to an alternative preferredembodiment of the present invention. Step 1002 of FIG. 10 for bit ratecontroller 1000 is identical to step 802 of FIG. 8 for bit ratecontroller 800.

Bit rate controller 1000 generates an estimate B_(u) ^(e) (i-1) of thenumber of bits used to encode the previous macroblock i-1 (in step 1004of FIG. 10) using Equation (6) as follows: ##EQU4## where: K₂ is aspecified positive constant (preferably, 3);

CM(i) is a complexity measure for the current macroblock i (CM(i) ispreferably equal to the sum of absolute differences SAD(i) for thecurrent macroblock i); and

Q(i-1) is the quantization level used to encode the previous macroblocki-1.

The estimated buffer content C_(b) ^(e) (i) is generated (in step 1006)using the following Equation (7):

    C.sub.b.sup.e (i)=C.sub.b.sup.e (i-1)+K.sub.1 [B.sub.u.sup.e (i-1)-B.sub.t (i)],                                                     (7)

where:

C_(b) ^(e) (i-1) is the estimated buffer content for the previousmacroblock i-1;

K₁ is a specified constant that is less than or equal to 1 (andpreferably equal to 1); and

B_(t) (i) is the target number of bits for the current macroblock i.

The estimated buffer content C_(b) ^(e) (i) is then used to generate theunscaled quantization level Q_(u) (i) for the current macroblock i (instep 1008) using the following Equation (8): ##EQU5## Steps 1010, 1012,and 1014 of FIG. 10 for bit rate controller 1000 are identical to steps808, 810, and 812 of FIG. 8 for bit rate controller 800, respectively.

To prevent a possible long-term drift in the buffer content due to usingan estimate of the number of bits used instead of the actual number ofbits used, the buffer content is preferably adjusted after encoding thegroup of macroblocks (step 1016) using the following Equation (9):

    C.sub.b =C.sub.b.sup.e -B.sub.u.sup.e (TOT)+B.sub.u.sup.a (TOT),(9)

where:

C_(b) ^(a) is the adjusted buffer content, which is used as the previousbuffer content for the similar component plane of the next frame;

C_(b) ^(e) is the estimated buffer content after completely encoding thecurrent component plane;

B_(u) ^(e) (TOT) is the total estimate number of bits used for thecurrent component plane; and

B_(u) ^(a) (TOT) is the total actual number of bits used for the currentcomponent plane.

Referring now to FIG. 11, there is shown a graphical representation ofthe results of applying bit rate controller 1000 of FIG. 10 to the samesequence of video images used to generate FIG. 9.

Despite the control over the selection of quantization levels providedby bit rate controllers 800 and 1000, the encoding of video signals mayintermittently exceed the available transmission bandwidth. Thoseskilled in the art will understand that this may occur when encodingintra frames (i.e., frames encoded entirely as intra blocks) whichtypically use about 2-3 times as many bits as frames encoded using bothinter and intra blocks. One way to recover from such events is to dropone or more frames (after the intra frame) to allow the encoder tore-synchronize with the signal transmission.

Referring now to FIG. 12, there is shown a process flow diagram of theprocessing implemented by bit rate controllers 800 and 1000 to determinewhen the encoder should drop a frame, according to a preferredembodiment of the present invention. To decide when to drop a frame, thebit rate controller generates the number of available bits B_(a) (n) forencoding the current frame n (in step 1202 of FIG. 12) by implementingthe following Equation (10):

    B.sub.a (n)=B.sub.a (n-1)-B.sub.f (n-1)+B.sub.f.sup.t,     (10)

where:

B_(a) (n-1) is the number of available bits from the previous frame n-1;

B_(f) (n-1) is the number of bits actually used to encode the previousframe n-1; and

B_(f) ^(t) is the specified target number of bits per frame.

The target number of bits per frame B_(f) ^(t) may be generated bydividing the target bit rate (in bits per second) by the video framerate (in frames per second). The number of available bits B_(a) (n-1)from the previous frame n-1 is preferably initialized to the targetnumber of bits per frame B_(f) ^(t) at the start of the video sequence.The number of bits actually used B_(f) (n-1) to encode the previousframe n-1 is preferably initialized to 0 at the start of the videosequence.

If the number of available bits B_(a) (n) for encoding the current framen is negative (step 1204), then the current frame is skipped (i.e., notencoded) (step 1206) and the number of available bits B_(a) (n+1) forthe next frame n+1 is adjusted (step 1208) by adding the bits allocatedfor frame n as indicated in the following Equation (11):

    B.sub.a (n+1)=B.sub.a (n)+B.sub.f.sup.t.                   (11)

Processing then returns to step 1204 to test the number of availablebits for encoding the next frame n+1.

If (or when) the number of available bits is not less than zero (step1204), then the current frame is encoded (step 1210).

Those skilled in the art will understand that the processing of FIG. 12is equivalent to skipping as many frames as needed to bring the buffercontent within a specified threshold, where the specified threshold ispreferably set to one frame of bits.

Another Alternative Preferred Bit Rate Controller

Referring now to FIGS. 13, there is shown a process flow diagram of theprocessing of bit rate controller 1300 implemented by pixel processor302 of FIG. 3 to select the quantization levels for encoding videosignals of each component plane to improve bit rate uniformity,according to another alternative preferred embodiment of the presentinvention. Bit rate controller 1300 uses statistical scene content-basedprediction to attempt to maximize spatiotemporal video quality at agiven bit rate. Bit rate controller 1300 uses off-line-generatedmappings between the number of bits available to encode a typical videoframe and quantization level. Bit rate controller 1300 uses the mappingsin real time to select quantization levels for the current frame.

Off-Line Generation of Mappings

Referring now to FIG. 14, there is shown a process flow diagram of theprocessing implemented off line to generate the mappings used by bitrate controller 1300 of FIG. 13, according to a preferred embodiment ofthe present invention. The mappings for N different intra quantizationlevels and N different inter quantization levels are generated from aset of video sequences that are representative of the video sequences tobe processed in real time. In a preferred embodiment, N is 16.

For each intra quantization level, each video sequence is encoded usingonly intra encoding (step 1402 of FIG. 14). For each intra-encodedframe, the IntraSAD is generated for the entire frame and the number ofbits in the encoded frame is determined (step 1404). For eachquantization level q, using all the IntraSAD and bits per frame (BPF)values from step 1404 for that quantization level, generate the linearrelationship that best fits the data (step 1406), where the linearrelationship may be represented as follows:

    BPF=M.sub.intra.sup.q *IntraSAD+B.sub.intra.sup.q

where M_(intra) ^(q) is the slope and B_(intra) ^(q) is the Y interceptfor the linear relationship for intra-encoding quantization level q. ForN intra quantization levels, N linear relationships are generated.

Similarly, for each inter quantization level, each video sequence isencoded using only inter encoding (step 1408). For each inter-encodedframe, the InterSAD is generated for the entire frame and the number ofbits in the encoded frame is determined (step 1410). For eachquantization level q, using all the InterSAD and bits per frame (BPF)values from step 1410 for that quantization level, generate the linearrelationship that best fits the data (step 1412), where the linearrelationship may be represented as follows:

    BPF=M.sub.inter.sup.q *InterSAD+B.sub.inter.sup.q

where M_(inter) ^(q) is the slope and B_(inter) ^(q) is the Y interceptfor the linear relationship for inter-encoding quantization level q. ForN inter quantization levels, N linear relationships are generated.

IntraSAD and InterSAD are defined earlier in this specification in thesection entitled "Macroblock Classification."

Real-Time Bit Rate Control

Referring again to FIG. 13, bit rate controller 1300 may be used toselect quantization levels for real-time encoding of video frames toprovide relatively uniform bit rates. For a given target bit rate B_(t)(in bits per second) and target frame rate F_(t) (in frames per second),bit rate controller 1300 initializes the target bits per frame BPF_(t)(in bits per frame) by dividing the target bit rate B_(t) by the targetframe rate F_(t) (step 1302 of FIG. 13).

For the current frame, bit rate controller 1300 generates (1) theaverage IntraSAD for all the intra blocks in the current frame, (2) theaverage InterSAD for all the inter blocks in the current frame, (3) thepercentage k of the blocks in the current frame that are intra blocksand (4) the percentage (1-k) of the blocks in the current frame that areinter blocks (step 1304).

For each quantization level q, the number of bits required to encode thecurrent frame using that quantization level is estimated using thelinear relationships generated during the off-line processing of FIG.14. The estimated number of bits per frame (BPF_(e) (q)) forquantization level q may be generated using the following equation:

    BPF.sub.e =k*(M.sub.intra.sup.q *IntraSAD.sub.ave +B.sub.intra.sup.q)+(1-k)*(M.sub.inter.sup.q *InterSAD.sub.ave +B.sub.inter.sup.q)

Note that the same quantization level q is used for both the intrablocks and the inter blocks. The quantization level corresponding to theestimated number of bits per frame (BPF_(e) (q)) that is closest to butstill less than the target bits per frame BPF_(t) is selected as thequantization level for the current frame (step 1306).

The current frame is then encoded using the quantization level qselected in step 1306 (step 1308). The actual number of bits used toencode the current frame (BPF_(a)) is then used to update the targetbits per frame (BPF_(t)) (step 1310), preferably using the followingequation:

    BPF.sub.t =BPF.sub.t *(BPF.sub.t /BPF.sub.a)

If there is another frame to encode (step 1312), then processing for bitrate controller 1300 returns to step 1304 to repeat steps 1304-1310 forthe next frame.

Quantization

As described above in reference to step 416 of FIG. 4, the encoderquantizes the DST coefficients. In a preferred embodiment, quantizationis performed as follows:

if (v_(u) >=0)

v_(q) =v_(u) /q;

else

v_(q) =-(-v_(u) /q);

where v_(u) is the unquantized DST coefficient, q is the quantizer, "/"represents division with truncation, and v_(q) is quantized DSTcoefficient. The different treatment of DST coefficients with negativevalues ensures truncation toward zero. Those skilled in the art willunderstand that a purpose of this is to improve compression by alwaystruncating toward the smaller of the two nearest integer values.

Variable-Length Encoding

Several kinds of signals in the compressed video bitstream of thepresent invention are variable-length encoded. The variable-lengthcodebooks used in the compressed video bitstream are preferably allvariations on a single type of variable-length code, which istechnically known as a Hackenbush code. Hackenbush coding is a subset ofHuffman encoding in which all code words are of the form [string of k0's][1][some additional bits]. The [string of k 0's][1] is the codeprefix and the additional bits are the code bits.

In the present invention, k is preferably a value in the range 0≦k≦7. AHackenbush codebook is completely specified by saying for each k howmany "additional bits" X(k) there are. By definition, the additionalbits may range over all possible X(k)-bit binary code words.

The decoded value for a given Hackenbush code is defined as the index ofthat code word in a lexicographically-ordered list. For example,consider the codebook defined by X(0)=2, X(1)=1, X(2)=3, which may bewritten more compactly as {2, 1, 3}. The code words for this codebookare all codes of the form 1xx, 01x, and 001xxx. Table I presents thecode words and corresponding values for this codebook.

                  TABLE I                                                         ______________________________________                                        Code Words and Corresponding Values for the (2, 1, 3)                         Hackenbush Codebook.                                                                 Code Word                                                                             Value                                                          ______________________________________                                               100     0                                                                     101     1                                                                     110     2                                                                     111     3                                                                     010     4                                                                     011     5                                                                     01000   6                                                                     01001   7                                                                     01010   8                                                                     01011   9                                                                     01100   10                                                                    01101   11                                                                    01110   12                                                                    01111   13                                                             ______________________________________                                    

The compressed video bitstream of the present invention uses twodifferent Hackenbush codebooks--one for decoding the macroblock signals,and one for decoding the block signals. These codebooks are:

    ______________________________________                                        Macroblock Codebook  {1,2,3,4*}                                               Block Codebook       {1,2,3,4,5,6,5,6*}                                       ______________________________________                                    

An asterisk denotes that in a given row of the codebook, the 1 at theend of the prefix is replaced with an x bit.

Tables II and III present the code words and corresponding values forthe Macroblock Codebook and the Block Codebook, respectively.

                  TABLE II                                                        ______________________________________                                        Code Words and Corresponding Values for the                                   Macroblock Codebook.                                                                    Code Words                                                                             Values                                                     ______________________________________                                                    1x         0-1                                                                01xx       2-5                                                                001xxx      6-13                                                              00000000   hole                                                   00000001 to 00011110   14-43                                                              00011111   separator                                              ______________________________________                                    

                  TABLE III                                                       ______________________________________                                        Code Words and Corresponding Values for the                                   Block Codebook.                                                                            Code Words                                                                              Values                                                 ______________________________________                                                       1x          0-1                                                               01xx        2-5                                                               001xxx       6-13                                                             0001xxxx    14-29                                                             00001xxxxx  30-61                                                             000001xxxxxx                                                                               62-127                                                           0000001xxxxx                                                                              128-159                                                           00000000 00xxxx                                                                           hole                                               00000000 010000 to                                                                           00000001 101111                                                                           160-255                                            ______________________________________                                    

Both of these codebooks have a "hole"--a single range of code words inthe lexicographically-ordered list that is not allowed to occur. Sincethese code words are not part of the codebook, the codebook valuescontinue consecutively after skipping the "hole." The hole for themacroblock codebook comprises the single code word (00000000) (the firstcode in the 4* section). The hole for the block codebook comprises the16 code words beginning with (00000000 000000) (the first code in the 6*section). These holes guarantee that the picture start codePictureStartCode and the slice start code SliceStartCode cannot beemulated elsewhere in the compressed bitstream.

Temporal Post-Filtering

Referring again to FIG. 4, during the generation of the compandedreference frame corresponding to the current input frame, a temporalpost-filter is preferably applied to clamped Y component signals (step432 of FIG. 4). The temporal post-filter replaces the currentreconstructed frame by a weighted sum of the current and previousframes. Temporal post-filtering has the effect of reducing mosquitoesand other compression artifacts. The temporal post-filter is preferablyonly applied to the inter blocks of the Y-component plane.

The temporal post-filter is preferably identical to the temporalpre-filter described earlier in this specification in the sectionentitled "Temporal Pre-Filtering." A preferred temporal post-filter isrepresented as follows:

    c'={c+(p-c+(1<<s))}>>(s+1)

where c is a Y component of an inter macroblock of the current frame, pis the corresponding non-motion-compensated Y component of the referenceframe, and s is the temporal filter strength. The temporal filterstrength s may be either 1, 2, or 3, where s=1 corresponds to taking 1/4of the reference image, s=2 corresponds to taking 1/8 of the referenceimage, and s=3 corresponds to taking 1/16 of the reference image. The"(1<<2)" term is included to avoid drift due to integer math.

Temporal post-filtering is preferably not applied to empty macroblocks,or to empty blocks that have a motion vector of zero. In these cases,each current Y component (curr[][]) is identical to the correspondingnon-motion-compensated Y component (prev[][]) from the reference frame.Temporal post-filtering is, however, preferably applied to empty blockswith non-zero motion vectors.

Compressed Video Signal Format

Referring now to FIG. 15, there is shown a representation of thebitstream format of the compressed video signals generated by pixelprocessor 302 of FIG. 3 and decoded by host processor 202 of FIG. 2,according to a preferred embodiment of the present invention. Theasterisks (*) in FIG. 15 indicate those fields that start on a byteboundary.

The compressed video bitstream format for one video frame comprises apicture header followed by one or more slice fields for each componentplane of the video frame. A slice is a contiguous group of one or morerows of macroblocks of a component plane. Each component plane may bedivided into one or more slices and a slice may not extend over morethan one component plane. Thus, each video frame is represented by apicture header followed by three or more slice fields. Component planesare divided into slices to provide reduced encode/decode latency as wellas resilience to bitstream errors and loss of flames or partial flameson a network.

The bits of the compressed video bitstream of FIG. 15 are preferablyinserted in each byte of data in the order LSB to MSB. Bytes arepreferably inserted in increasing sequence (byte 0, 1, 2, . . . ).Therefore, the first bit of the bitstream is byte 0 bit 0, followed bybyte 0 bit 1, up to byte 0 bit 7, and followed by byte 1 bit 0.

Picture Header

The 18-bit PictureStartCode signal of the picture header of FIG. 15 is abitstream pattern that identifies the start of a frame. PictureStartCodeis a unique code that preferably does not occur anywhere else in thebitstream. As a result, the decoder may scan a compressed signal forPictureStartCode to provide some degree of automatic synchronization anderror recovery. PictureStartCode preferably has the 18-bit binary value(00000000 00000000 10).

The 4-bit VersionNumber signal identifies the particular version of thecompressed video signal format and is preferably 1.

The 2-bit ImageSize signal identifies the size of the encoded image.Table IV contains the image sizes for the different values of ImageSize.An ImageSize signal value of 3 indicates that the size of the encodedimage is explicitly specified in the picture header in the ImageXSizeand ImageYSize signals (described below). If ImageSize is not 3, thenImageXSize and ImageYSize signals are not included in the pictureheader.

                  TABLE IV                                                        ______________________________________                                        Image Sizes Indicated by the ImageSize Signal.                                ImageSize                                                                     Value         Image Size                                                      ______________________________________                                        0             (160 × 120)                                               1             (240 × 180)                                               2             (320 × 240)                                               3             defined                                                         ______________________________________                                    

The 2-bit TempFiltStrength signal specifies the strength of the temporalpost-filter. Table V contains the temporal post-filter strengths for thedifferent values of TempFiltStrength. A TempFiltStrength signal value of0 indicates that the temporal post-filter is turned off for this image.The temporal post-filter is described in further detail earlier in thisspecification in the section entitled "Temporal Post-Filtering."

                  TABLE V                                                         ______________________________________                                        Temporal Post Filter Strengths Indicated by the                               TempFiltStrength Signal.                                                      TempFiltStrength Filter                                                       Value            Strength                                                     ______________________________________                                        0                off                                                          1                1/4                                                          2                1/8                                                          3                1/16                                                         ______________________________________                                    

The 3-bit QuantMatrices signal encodes the quantization matrices thedecoder should use for this frame. There are preferably 32 differentquantization matrices--16 for use in intra blocks and 16 for use ininter blocks. These 32 quantization matrices may be derived from twobase matrices (one for intra and one for inter), five quantizationparameters, and a flag (PowersOf2). The generation of the 32quantization matrices from the two base matrices, five quantizationparameters, and PowersOf2 flag is described in further detail later inthis specification in the section entitled "Generation of QuantizationMatrices."

Table VI identifies which base matrices, quantization parameters andPowersOf2 flags to use for the different values of QuantMatrices."Default" indicates that the specified default base matrices orspecified default values for the five quantization parameters are to beused to generate the 32 quantization matrices. "In QuantData" indicatesthat the matrices and/or parameters are specified in the QuantDatasignal of the picture header. "From Past" indicates that the matricesand/or parameters (which must have been set on a previous frame) areinherited from the past). The QuantMatrices values 5-7 are preferablyreserved.

                  TABLE VI                                                        ______________________________________                                        Base Matrices, Quantization Parameters, and PowersOf2                         Flag Values Indicated by the QuantMatrices Signal.                            QuantMatrices                                                                            Base       Quantization                                            Value      Matrices   Parameters  PowersOf2                                   ______________________________________                                        0          Default    Default     0                                           1          Default    Default     1                                           2          Default    In QuantData                                                                              In QuantData                                3          In QuantData                                                                             In QuantData                                                                              In QuantData                                4          From Past  From Past   From Past                                   5-7        Reserved                                                           ______________________________________                                    

A value of 1 for the 1-bit IntraFlag signal indicates that this frame isentirely intra encoded (i.e., that each block of each macroblock of eachslice of each component plane of the current frame is intra encoded). Ifthe IntraFlag signal value is 0, then this frame may include both intraand inter blocks.

The 2-bit Reserved1 signal is reserved and preferably has a value of 0.

The 10-bit FrameNumber signal contains a counter that indicates to thedecoder the receipt of successive video flames. The encoder preferablyincrements this signal by 1 (modulo 1024 for each frame it encodes. Thedecoder preferably uses the FrameNumber signal to determine whether anyflames have been "lost" (except in the unusual case in which a integermultiple of 1024 flames in a row are lost).

The 6-bit Reserved2 signal is reserved and preferably has a value of 0.

As indicated in Table IV, when the ImageSize signal has a value of 3,the ImageXSize signal defines the width of the image in pixels (or,equivalently, the number of Y components per image row) and theImageYSize signal defines the height of the image in pixels (or,equivalently, the number of Y components per image column). When theImageSize signal has a value other than 3, the picture header does notinclude an ImageXSize signal or an ImageYSize signal.

Referring now to FIG. 16, there is shown a representation of thebitstream format of the QuantData signal of the compressed video signalformat of FIG. 15. The asterisks (*) in FIG. 16 indicate those fieldsthat start on a byte boundary. As indicated in Table VI, when theQuantMatrices signal has a value of 2, the QuantData signal defines thefive quantization parameters and the PowersOf2 flag. When theQuantMatrices signal has a value of 3, the QuantData signal defines thefive quantization parameters, the PowersOf2 flag, and the two basematrices (as shown in FIG. 16). When the QuantMatrices signal has avalue other than 2 or 3, the picture header does not include a QuantDatasignal. Each base matrix consists of 64 6-bit fields packed into 48bytes. The inter base matrix is first, followed by the intra basematrix. How the five 6-bit quantization parameters (QuantStart,QuantStep, DCstep, Tilt[0], and Tilt [1]), the 1-bit PowersOf2 flag, andthe base matrices are used to generate quantization tables is describedin further detail later in this specification in the section entitled"Generation of Quantization Matrices."

Slice Signals

Referring now to FIG. 17, there is shown a representation of thebitstream format of each slice signal of the compressed video signalformat of FIG. 15. The asterisks (*) in FIG. 17 indicate those fieldsthat start on a byte boundary. The bitstream format for each slicecomprises a slice header, followed by a field containing the macroblocksignals, followed by a field containing the block signals. Note that themacroblock signals start on a byte boundary, but that the block signalsneed not, as they are concatenated to the end of the macroblock signals.Note also that all of the macroblock signals for the entire slice areencoded before any of the block signals are encoded.

Slice Header

The 18-bit SliceStartCode signal of the slice header of FIG. 17 is abitstream pattern that identifies the start of a slice. SliceStartCodeis a unique code that preferably does not occur anywhere else in thebitstream. As a result, as with the PictureStartCode signal, the decodermay scan a compressed signal for SliceStartCode to provide some degreeof automatic synchronization and error recovery. SliceStartCodepreferably has the 18-bit binary value (00000000 00000000 11).

The 6-bit SliceStart signal specifies where the slice starts in theimage. The units of SliceStart are interpreted as follows: Take the rowsof macroblocks in the Y, V, and U planes and list them in scan-lineorder. The value of SliceStart is the (zero-based) index into this list.For example, in a (160×120) image, there are 8 rows of macroblocks inthe Y plane, and 2 rows in each of the V and U planes. For this image,SliceStart would have values from 0 to 11, where 0 represents the toprow of macroblocks in the Y plane, 7 represents the bottom row ofmacroblocks in the Y plane, 8 represents the top row of macroblocks ofthe V plane, etc.

The 6-bit SliceSize signal specifies the size of the slice in rows ofmacroblocks.

The 2-bit Reserved signal is reserved and preferably has a value of 0.

Macroblock Signals

The macroblock signals of the slice signal format of FIG. 17 describethe structure of each macroblock in a slice. The macroblock signalscomprise a series of records of the form:

    Empty [Empty . . . ] Type [QValue] [MV] [CBP]

followed by an optional macroblock separator signal. The macroblocksignals are run-length encoded signals comprising interleaved runs ofempty macroblocks followed by information about the next non-emptymacroblock. The brackets indicate that the existence of a particularsignal depends on the values of other signals, as described below. Themacroblock separator signal preferably has the value (00011111) and isprovided as a convenience to help the decoder switch from decoding themacroblock signals to decoding the block signals.

Each record in the macroblock signals has one or more Empty signals,which indicate how many empty macroblocks there are between the currentnon-empty macroblock and the previous non-empty macroblock. The numberof consecutive empty macroblocks is Huffman encoded using a codebookthat has a maximum value that is less than the longest allowable run ofempty macroblocks. As a result, there may be more than one Empty signalto indicate a long run of empty macroblocks. In that case, the run ofempty macroblocks is interpreted as the sum of the values correspondingto the two or more Empty signals. A macroblock is empty if all of thequantized DST coefficients of each of the four blocks of the macroblockare zero.

The Type signal encodes four pieces of information that are encodedusing both a semantic table and a Huffman codebook. The four pieces ofinformation may be represented as four 1-bit signals (Intra, NewQ, MV,and CBP). Table VII presents the semantic table for the informationencoded in the Type signal. The 4-bit value of Table VII is the value ofthe bits corresponding to the four pieces of information. These 4-bitvalues are mapped by the semantic table to Huffman values that are thenencoded using the Huffman codebook.

                  TABLE VII                                                       ______________________________________                                        Semantic Table for Information Stored in Type                                 Signal.                                                                                                      4-bit Huffman                                  Intra  NewQ      MV     CBP    Value Value                                    ______________________________________                                        0      0         0      1      1     0                                        0      0         1      1      3     1                                        1      0         0      0      8     2                                        0      1         1      1      7     3                                        0      1         0      1      5     4                                        1      1         0      0      12    5                                        0      0         1      0      2     6                                        ______________________________________                                    

The 1-bit CBP bit (bit 0 of the 4-bit value of Table VII) is 1, if a CBPsignal is present in the current record. If the CBP bit is 0, then a CBPsignal is not present and all four blocks of the macroblock are empty.

The 1-bit MV bit (bit 1) is 1, if an MV signal is present in the currentrecord. If the MV bit is 0, then an MV signal is not present and itsmotion vector is zero. Similarly, the motion vector for an emptymacroblock is zero.

The 1-bit NewQ bit (bit 2) is 1, if a QValue signal is present in thecurrent record. If the NewQ bit is 0, then a QValue signal is notpresent and the quantization level for the current macroblock is thesame as the quantization level for the previous macroblock (whetherempty or non-empty).

If the 1-bit Intra bit (bit 3) is 1, then all four blocks of the currentmacroblock are intra encoded. If the Intra bit is 0, then all fourblocks of the current macroblock are inter encoded. In a preferredembodiment, a macroblock may not be partially inter encoded andpartially intra encoded.

Depending upon the value encoded in the Type signal, a record may alsoinclude a QValue signal, an MV signal, and a CBP signal.

The QValue signal is a Huffman-encoded signal that represents adifferential quantization level. The quantization level for thismacroblock (thisQ) is calculated from the quantization level for theprevious macroblock (prevQ) as follows:

    thisQ=prevQ+tosigned (QV+1),

where QV represents the Huffman-decoded value corresponding to theHuffman-encoded QValue signal and tosigned() is a function whichconverts from an unsigned signal to a signed signal and is defined thefollowing C computer language code:

    ______________________________________                                                 tosigned (val)                                                                {                                                                               r = (val + 1) >> 1;                                                           if (val is even)                                                                return (r);                                                                 else                                                                            return (-r);                                                              }                                                                    ______________________________________                                    

The resulting thisQ signal is a 4-bit signal that specifies which of 16quantization matrices to use. The value of prevQ is preferablyinitialized to 8 at the start of each slice.

The MV signal comprises two Huffman-encoded signals that representdifferential motion vector X and Y components. The motion vectorcomponents for the current macroblock (thisMVx, thisMVy) are generatedfrom the motion vector components for the previous macroblock (prevMVx,prevMVy), following the raster scan sequence of FIG. 5, as follows:

    thisMVx=prevMVx+tosigned (MVx)

and

    thisMVy=prevMVy+tosigned (MVy)

where MVx and MVy represent the Huffman-decoded values corresponding tothe first and second Huffman-encoded signals in the MV signal,respectively, and tosigned() is the same function as defined above. Apositive X component means that the reference block in the previousframe is to the right of the block in the current frame. A positive Ycomponent means that the reference block is below the block in thecurrent frame. At the start of each row of macroblocks, the motionvector of the previous macroblock (prevMVx, prevMVy) is preferably setto be the zero vector (0,0).

The CBP (or coded block pattern) signal specifies which blocks in thecurrent macroblock are empty. That information is encoded in the CBPsignal using both a semantic table and a Huffman codebook. Table VIIIpresents the semantic table for the information encoded in the CBPsignal. The 4-bit value of Table VIII specifies the emptiness of thefour blocks of the macroblock in the order (4,3,2,1), where the LSB ofthe 4-bit value corresponds to block 1 of the macroblock as defined inFIG. 5. A bit value of 1 means that the corresponding block isnon-empty; 0 means that the block is empty. The 4-bit values are mappedby the semantic table to Huffman values that are then encoded using theHuffman codebook.

                  TABLE VIII                                                      ______________________________________                                        Semantic Table for Information Stored in CBP Signal.                          Block  Block    Block    Block  4-bit  Huffman                                4      3        2        1      Value  Value                                  ______________________________________                                        1      1        1        1      15     0                                      0      0        1        1      3      1                                      1      1        1        0      14     2                                      1      1        0        1      13     3                                      1      1        0        0      12     4                                      0      1        1        1      7      5                                      0      1        0        0      4      6                                      1      0        0        0      8      7                                      1      0        1        1      11     8                                      0      0        0        1      1      9                                      1      0        1        0      10     10                                     0      0        1        0      2      11                                     0      1        0        1      5      12                                     0      1        1        0      6      13                                     1      0        0        1      9      14                                     ______________________________________                                    

If all four blocks are empty, then the CBP bit of the Type signal is setto 0 and no CBP signal is present in the record. As a result, Table VIIIdoes not have a 4-bit value of 0.

There are two special cases. If the Type signal indicates that themacroblock is intra encoded, then each of the four blocks is assumed tobe non-empty and no CBP signal is present in the record. If the Typesignal indicates that the macroblock is inter encoded and if the Typesignal indicates that the CBP signal is not present (i.e., the CBP bitis 0), then each of the four blocks is assumed to be empty.

Block Signals

The block signals of the slice signal format of FIG. 17 encodeinformation for each of the non-empty blocks in the slice. The blocksignals are a series of Huffman-encoded run-val pairs terminated by ablock separator signal comprising a string of 14 zero bits. Each run-valpair corresponds to a run of DST coefficients having value 0 followed bya non-zero DST coefficient value. Common run-val pairs are encoded witha single RVcode which is used as an index to a run table (runtbl) and avalue table (valtbl).

The 14-bit block separator signal is provided as a convenience to helpthe decoder switch from decoding the block signals to decoding the nextslice signal. The block separator signal permits the decoder to parsesyntactically all the block signals without doing any semanticprocessing. The block separator signal corresponds to the first code inthe "hole" in the block codebook.

For all but the last slice in a frame, the encoder preferably uses thezero bits which begin the next slice header (i.e., first part ofSliceStartCode) to serve the function of the 14-bit block separatorsignal of the block signal, so that no extra bits in the bitstream arerequired. The encoder preferably pads the last byte of each slice usingzero bits, and if the encoder inserts any padding bytes between slices,they are preferably all zero. At the end of the last slice in a frame,the encoder preferably specifically inserts the 14 zero bits.

Video Signal Decoding

Referring now to FIG. 18, there is shown a process flow diagram of theprocessing implemented by host processor 202 of FIG. 2 to decode eachframe of the encoded video signals generated by pixel processor 302 ofFIG. 3, according to a preferred embodiment of the present invention. Asdescribed earlier in the specification in conjunction with FIGS. 15, 16,and 17, the encoded signals for each video frame comprise a pictureheader signal followed by three or more slice signals for the threecomponent planes. Each slice signal comprises a slice header, followedby Huffman-encoded macroblock signals, followed by Huffman-encoded blocksignals. Decoding the encoded video signals involves:

o Interpreting the picture and slice header signals;

o Huffman-decoding and interpreting the macroblock signals; and

o Decoding (including Huffman-decoding) the block signals.

Huffman decoding is described in further detail later in thisspecification in the section entitled "Variable-Length Decoding."

Referring again to FIG. 18, decoding of an encoded input frame begins byinterpreting the picture header signal (step 1802 of FIG. 18). Theinterpretation of picture header signals is substantially dictated bythe format of those signals as described earlier in the specification inconjunction with FIGS. 15 and 16.

If indicated by the picture header signal, new quantization tables arethen generated (step 1804). The generation of quantization tables isdescribed in further detail in a later section of this specificationentitled "Generation of Quantization Matrices."

The signals for each slice of the frame are then decoded. Decoding aslice signal begins with interpretation of the slice header signal (step1806). The interpretation of slice header signals is substantiallydictated by the format of those signals as described earlier in thespecification in conjunction with FIG. 17.

After interpreting the slice header signal, the macroblock signals forthe slice are decoded (step 1808). The decoding of macroblock signals isdescribed in further detail later in this specification in conjunctionwith FIGS. 19 and 20 and in the section entitled "Decoding MacroblockSignals."

After decoding the macroblock signals, the block signals for the sliceare decoded (step 1810). The decoding of block signals is described infurther detail later in this specification in conjunction with FIGS. 21and 22 and in the section entitled "Decoding Block Signals."

If there is another slice for the current frame (step 1812), then steps1806, 1808, and 1810 are repeated for the next slice. Otherwise, theentire frame has been decoded and temporal post-filtering is applied tothe reconstructed Y component plane (step 1814). The results of temporalpost-filtering are used as the reference frame for decoding the nextframe of encoded video signals. Temporal post-filtering was described infurther detail earlier in this specification in the section entitled"Temporal Post-Filtering." In an alternative preferred embodiment, thedecoder applies the temporal filter to the inter encoded blocks at thesame time that it adds the prediction to the correction, and then clampsthe results.

After temporal post-filtering, a block edge filter is applied, ifselected (step 1816). Block edge filtering is described in furtherdetail later in this specification in the section entitled "Block EdgeFiltering." The results of block edge filtering are the decoded outputframe signals corresponding to the current input frame signals. Thesesignals may then be converted for display on monitor 106 of the localconferencing system of FIG. 1.

Decoding Macroblock Signals

Referring now to FIG. 19, there is shown a process flow diagram of theprocessing implemented by host processor 202 of FIG. 2 to decode themacroblock signals for each slice of each frame of encoded videosignals, according to a preferred embodiment of the present invention.The processing of FIG. 19 is equivalent to step 1808 of FIG. 18. Asdescribed earlier in this specification in the section entitled"Macroblock Signals," the macroblock signals comprises a series ofrecords of the form:

    Empty [Empty . . . ] Type [QValue] [MV] [CBP]

followed by a macroblock separator signal.

Decoding of the macroblock signals begins by decoding the first run ofempty macroblocks encoded in the "Empty [Empty . . . ]" signals of thefirst macroblock record (step 1902 of FIG. 19). The decoding of runs ofempty macroblocks is described in further detail later in thisspecification in conjunction with FIG. 20 and in the section entitled"Decoding Runs of Empty Macroblocks." Host processor 202 reconstructsthe component planes using the runs of empty macroblocks, which wereencoded in raster-scan sequence.

After decoding the run of empty macroblocks, the Type signal for thecurrent macroblock (i.e., the macroblock following the run of emptymacroblocks in the raster-scan sequence) is Huffman decoded andtranslated using the semantic relationships of Table VII into thecorresponding 4 1-bit signals (Imra, NewQ, MV, and CBP) (step 1904).Huffman decoding is described in further detail later in thisspecification in the section entitled "Variable-Length Decoding."

If the 1-bit NewQ signal is set (i.e., preferably 1) (step 1906), thenthe current macroblock record contains a Huffman-encoded QValue signal.In that case, the QValue signal is Huffman decoded and the decoded valueis used to generate the quantization level (thisQ) for the currentmacroblock using the relation described earlier in this specification inthe section entitled "Macroblock Signals" (step 1908). Otherwise, theNewQ bit is not set and processing continues to step 1910.

If the 1-bit MV signal is set (i.e., preferably 1) (step 1910), then thecurrent macroblock record contains two Huffman-encoded signals thatrepresent differential motion vector X and Y components. In that case,the signals are Huffman decoded and the decoded component value are usedto generate the motion vector components (thisMVx, thisMVy) for thecurrent macroblock using the relation described earlier in thisspecification in the section entitled "Macroblock Signals" (step 1912).Otherwise, the MV bit is not set and processing continues to step 1914.

If the 1-bit CBP signal is set (i.e., preferably 1) (step 1914), thenthe current macroblock record contains a semantic and Huffman-encodedCBP signal. In that case, the CBP signal is Huffman decoded andtranslated using the semantic relationships of Table VIII into thecorresponding 4-bit signal that indicates which blocks in the currentmacroblock are empty (step 1916), as described earlier in thisspecification in the section entitled "Macroblock Signals". Otherwise,the CBP bit is not set and processing continues to step 1918.

If the current slice has another macroblock record (step 1918), thenprocessing returns to step 1902 to repeat steps 1902-1916 for the nextmacroblock record. Otherwise, all of the macroblock signals for thecurrent slice have been decoded. In a preferred embodiment, the end ofthe macroblock signals may be detected by recognizing the macroblockseparator signal.

In an alternative preferred embodiment, the decoder Huffman decodes allof the signals for an entire slice (i.e., all macroblock signals, atransition signal, and all block signals) before interpreting andapplying the actions of the semantic Huffman decoded signals.

Decoding Runs of Empty Macroblocks

Referring now to FIG. 20, there is shown a process flow diagram of theprocessing implemented by host processor 202 of FIG. 2 to decode eachrun of macroblocks for each slice of each frame of encoded videosignals, according to a preferred embodiment of the present invention.The processing of FIG. 20 is equivalent to step 1902 of FIG. 19. Asdescribed earlier in this specification in the section entitled"Macroblock Signals," a run of empty macroblocks may exceed the maximumcode value of 43 for the Huffman codebook used to encode macroblocksignals. A run of 42 or more empty macroblocks is therefore preferablyencoded using two or more Empty signals. This section describes thedecoding of those two or more Empty signals.

After initializing the counter for the number of empty macroblocks (step2002), the next Empty signal (in this case, the first Empty signal) isHuffman decoded (step 2004). If the decoded value is less than 42 (step2006), then the current Empty signal is the last Empty signal for thecurrent macroblock record and the counter is incremented by the decodedvalue (step 2008).

Otherwise, if the decoded value is equal to 42 (step 2010), then thereis at least one more Empty signal for the current macroblock record, thecounter is incremented by 41 (step 2012), and processing returns to step2010 to process the next Empty signal. Otherwise, the decoded value is43 which signifies that all of the remaining macroblocks in the currentslice are empty (step 2014).

Note that, for example, when a run has exactly 42 empty macroblocks, theencoder preferably generates two Empty signals: one corresponding to acode of 42 and one corresponding to a code of 1. The decoder interpretsa code of 42 as indicating 41 empty macroblocks. In general, a code of41 implies that there are exactly 41 additional empty macroblocks, whilea code of 42 implies that there are more than 41 additional emptymacroblocks.

The processing of FIG. 20 may be represented by the following C computerlanguage code:

    ______________________________________                                        empty = 0    initialize number of empty macroblocks                           while (1)                                                                     code = gethuff( );                                                                             retrieve and decode next signal                              if (code < 42)                                                                {                                                                             empty += code;    increment empty by code                                     break;                                                                        }                                                                             else if (code == 42)                                                          empty += 41;    increment empty by 41                                         else if (code == 43)                                                          all macroblocks to end of slice are empty                                     }                                                                             ______________________________________                                    

where the function gethuff() retrieves and decodes the nextHuffman-encoded signal in the bitstream. The gethuff() function andHuffman decoding are described in further detail later in thisspecification in the section entitled "Variable-Length Decoding."

Decoding Block Signals

Referring now to FIG. 21, there is shown a process flow diagram of theprocessing implemented by host processor 202 of FIG. 2 to decode theblock signals for each slice of each frame of encoded video signals,according to a preferred embodiment of the present invention. Theprocessing of FIG. 21 is equivalent to step 1810 of FIG. 18.

As described earlier in this specification in the section entitled"Block Signals," the block signals comprise a series of Huffman-encodedrun-val pairs terminated by a block separator signal comprising a stringof 14 zero bits. Each run-val pair corresponds to a run of DSTcoefficients having value 0 followed by a non-zero DST coefficientvalue. Common run-val pairs are encoded with a single RVcode which isused as an index to a run table (runtbl) and a value table (valtbl).Those run-val pairs that are not contained in the lookup tables areencoded as four Huffman-encoded signals per run-val pair--one for theescape code, one for the run, and two for the value.

Decoding of the block signals begins by decoding the first run-val pairof the first block in the sequence of block signals (step 2102 of FIG.21). The decoding of run-val pairs is described in further detail laterin this specification in conjunction with FIG. 22 and in the sectionentitled "Decoding Run-Val Pairs."

Host processor 202 reconstructs the (8×8) blocks of quantized DSTcoefficients using the runs of zero DST coefficients and the non-zeroDST coefficient values to undo the zig-zag scanning sequence of FIG. 6(step 2104). An (8×8) block of quantized DST coefficients (coeff[8][8])may be created by the following procedure:

    ______________________________________                                        for (i=0; i<8; i++)                                                           for (j=0; j<8; j++)                                                           coeff[i][j] = 0;                                                              start at position "-1` on the zig-zag path (one step "before" 0)              for (each run/val pair)                                                       step forward by `run` positions on the zig-zag path                           deposit `val` at the new position                                             }                                                                             ______________________________________                                    

If the end of the current block has not yet been reached (step 2106),then processing returns to step 2102 to decode the next run-val pair.Otherwise, the current block of quantized coefficients is complete andthe DST coefficients are dequantized (step 2108). This dequantizationmay be implemented using the following C computer language code:

    ______________________________________                                        for (i=0; i<8; i++)                                                           for (j=0; j<8; j++)                                                           q = Qmatrix[Intral[thisQ][i][j];                                              c = coeff[i][j];                                                              if (c >0)                                                                     coeff[i] [j] = (q * c) + (q >> 1) - (q & 1);                                  else if (c < 0)                                                               coeff[i] [j] = (q * c) - (q >> 1) + (q & 1);                                  else if (c == 0)                                                              coeff[i] [j] = 0;                                                             }                                                                             ______________________________________                                    

where Qmatrix[2][16][8][8] is a table that contains the 32 (8×8)quantization tables. The generation of these 32 quantization tables isdescribed in further detail later in this specification in the sectionentitled "Generation of Quantization Matrices." The particularquantization table to use to dequantize the current block is specifiedby the Intra bit (encoded in the Type signal for the current macroblock)and the quantization level (thisQ).

If the current block is an intra block, then the DC prediction for theDC coefficient (i.e., the (0,0) coefficient in the (8×8) block) isundone (step 2110). Undoing DC prediction is implemented by incrementingthe DC coefficient (prevDC) for the previous intra block in the currentslice (following the block scanning sequence of FIG. 5) by thedequantized (0,0) coefficient for the current block (generated in step2108). Undoing DC prediction may be implemented by the following Ccomputer language code:

    ______________________________________                                                  coeff[0][0] += prevDC                                                         prevDC = coeff[0][0]                                                ______________________________________                                    

The value of prevDC is preferably initialized to 8*64 or 512 at thestart of each image slice. Those skilled in the art will understand thatthis preferred initial value for prevDC represents the gray level midwaybetween 0 and 127, times 8 (to scale the integer arithmetic to allowthree fractional bits).

The inverse discrete slant transform (IDST) is then applied to the (8×8)blocks of dequantized DST coefficients to reconstruct (8×8) blocks ofpixel components (step 2112). The IDST is described in further detaillater in this specification in the section entitled "Discrete SlantTransform."

If the current block is an inter block (step 2114), then the pixelcomponent signals are generated by performing block addition withrespect to the previous frame and clamping the results (step 2116). Thisinter block decoding may be represented by the following C computerlanguage code:

    ______________________________________                                        for (i=0; i<8; i++)                                                           for (j=0; j<8; j++)                                                           image[i][j] = clamp(MCprev[i][j]) + array[i][j],8,120);                       ______________________________________                                    

where array[][] contains the results of the IDST calculation, MCprev[][]is the corresponding motion-compensated (8×8) block of component signalsfrom the previous image, and the function clamp(n,min,max) limits avalue n to the range (min,max).

In an alternative preferred embodiment, the block addition for decodinginter blocks may be implemented simultaneously for two different (8×8)blocks of the current image using pseudo-SIMD processing. Pseudo-SIMDprocessing is described in further detail in U.S. patent application No.08/182,758, filed Jan. 14, 1994, assigned to the same assignee as thecurrent application, and the disclosure of which is incorporated in itsentirety herein by reference.

Otherwise, if the current block is an intra block (step 2114), then thepixel component signals for the current block are clamped (step 2118) asrepresented by the following C computer language code:

    ______________________________________                                        for (i=0; i<8; i++)                                                           for (j=0; j<8; j++)                                                           image[i][j] = clamp(array[i][j],8,120);                                       ______________________________________                                    

If the end of the current slice has not yet been reached (step 2120),then processing returns to step 2102 to decode the next run-val pair.Otherwise, the current slice is complete.

Decoding Run-Val Pairs

Referring now to FIG. 22, there is shown a process flow diagram of theprocessing implemented by host processor 202 of FIG. 2 to decode eachrun-val pair for each block of each frame of encoded video signals,according to a preferred embodiment of the present invention. Theprocessing of FIG. 22 is equivalent to step 2102 of FIG. 21. Asdescribed earlier in this specification in the section entitled "BlockSignals," each run-val pair is encoded either as a singleHuffman-encoded signal corresponding to an index to a run table and avalue table or explicitly as Huffman-encoded run and value signals.

Decoding a run-val pair begins by decoding the next Huffman-encodedsignal in the bitstream (step 2202). If the decoded signal is the end ofblock code EOB (preferably 0) (step 2204), then the rest of the DSTcoefficients in the current block are zero (step 2206).

Otherwise, if the decoded signal is the escape code ESC (preferably 11)(step 2208), then the run-val pair are explicitly encoded in thebitstream. In that case, retrieving and Huffman-decoding the next signalin the bitstream produces the run code (step 2212). Similarly,retrieving and Huffman-decoding the next two signals in the bitstreamproduce the value low and high codes, respectively (steps 2214 and2216). These low and high codes are then combined to generate the valuecode (step 2218), thereby completing the current run-val pair.Processing then returns to step 2202 to Huffman decode the next signalin the bitstream.

Otherwise, the decoded signal is not the escape code ESC (step 2208) andthe run-val pair is a common pair that is encoded as an index to runtable (runtbl) and value table (valtbl). In that case, the decoded indexis used to access the run and value codes from the lookup tables (step2210). Processing then returns to step 2202 to Huffman decode the nextsignal in the bitstream.

The processing of FIG. 22 may be represented by the following C computerlanguage code:

    ______________________________________                                        k = 0;                                                                        while (1)                                                                     v = gethuff( );                                                               if (v == EOB)                                                                 break;                                                                        else if (v == ESC)    get explicit run,val from bitstream                     {                                                                             run [k] = gethuff( ) + 1;                                                     lo = gethuff( );                                                              hi = gethuff( );                                                              val[k] = tosigned((lo | (hi<<6))+1);                                 }                                                                             else    lookup run,val in tables                                              {                                                                             run[k] = runtbl[v];                                                           val[k] = valtbl[v];                                                           }                                                                             k++;                                                                          }                                                                             ______________________________________                                    

The gethuff() function and Huffman decoding are described in furtherdetail later in this specification in the section entitled"Variable-Length Decoding." The tosigned() function is described earlierin this specification in the section entitled "Macroblock Signals." Thepreferred run and value tables are as follows:

    ______________________________________                                        runtbl[ ] = {                                                                          0      1      1    2    2    1    1    3                                      1      3      1    0    4    4    1    2                                      1      2      5    5    1    6    1    6                                      1      7      7    1    1    9    8    8                                      2      9      1    2    3    10   1    10                                     3      1      11   1    1    2    1    13                                     1      4      4    1    1    11   12   2                                      13     1      2    15   1    1    12   14                                     3      14     1    2    15   5    6    5                                      1      1      1    1    1    3    1    1                                      6      16     2    1    1    7    1    21                                     1      2      2    4    7    18   1    16                                     1      1      17   2    8    4    1    8                                      18     19     7    22   3    17   9    2                                      4      20     10   19   10   1    1    2                                      21     20     29   28   23   25   3    3                                      3      24     26   26   2    12   9    2                                      1      2      2    27   13   22   5    5                                      28     30     23   32   27   2    3    6                                      9      4      32   12   11   31   11   14                                     3      3      3    3    2    6    8    7                                      5      29     14   9    25   24   2    3                                      2      6      6    8    7    4    4    4                                      13     31     10   18   6    7    5    4                                      5      5      4    10   21   30   19   18                                     19     22     20   21   22   20   16   15                                     15     17     17   16   3    3    4    4                                      3      3      4    6    6    7    7    5                                      4      4      5    6    5    5                                       valtbl[ ] = {                                                                          0      -1     1    1    -1   -2   2    -1                                     -3     1      3    0    1    -1   -4   -2                                     4      2      -1   1    -5   1    5    -1                                     -6     -1     1    6    7    -1   -1   1                                      -3     1      -7   3    -2   -1   -8   1                                      2      8      -1   9    -9   4    -11  1                                      -10    -2     2    10   11   1    -1   -4                                     -1     -13    -5   -1   -12  13   1    1                                      3      -1     12   5    1    2    2    -2                                     -15    14     16   -14  15   -3   -17  18                                     -2     -1     6    17   -16  2    19   -1                                     -19    7      -6   -3   -2   1    -22  1                                      -20    -18    -1   -7   2    4    20   -2                                     -1     -1     -3   -1   -4   1    -2   -8                                     3      1      -2   1    2    -21  22   9                                      1      -1     -1   -1   -1   -1   5    -5                                     4      -1     -1   1    8    -2   2    11                                     21     10     -11  1    -2   1    3    -3                                     1      -1     1    1    -1   12   6    3                                      -3     -4     -1   2    -2   -1   2    2                                      -7     -9     -8   7    -12  5    -3   3                                      -4     1      -2   3    1    1    -10  8                                      -9     -4     -3   3    -4   6    5    -5                                     2      1      - 3  -2   4    -5   7    -6                                     5      -5     7    3    2    1    2    2                                      -2     -2     2    -2   2    -2   -2   2                                      -2     2      -2   2    -6   -10  -8   -9                                     10     9      -7   6    -5   5    4    -7                                     9      8      6    -6   -6   4                                       }                                                                             ______________________________________                                    

Note that runtbl[0]=valtbl[0]=0 and that runtbl[11]=valtbl[11]=0,because the values 0 and 11 are reserved for the EOB and ESC signals,respectively.

Discrete Slant Transform

The forward discrete slam transform (FDST) transforms pixel componentsin the spatial domain to DST components in the spatial frequency domain.The inverse DST (IDST) transforms DST components back into pixelcomponents. The discrete slam transform applies an (8×1) DST to each ofthe eight rows and eight columns of an (8×8) block. As described earlierin this specification in conjunction with FIG. 4, pixel processor 302 ofFIG. 3 applies the FDST when generating encoded video signals (step 412of FIG. 4). Pixel processor 302 also applies the IDST when generatingthe reference frame signals from the encoded video signals (step 426).Similarly, as described earlier in this specification in conjunctionwith FIG. 21, host processor 202 of FIG. 2 applies the IDST whendecoding the encoded video signals (step 2112 of FIG. 21).

A preferred embodiment of the (8×1) DST for the present invention may berepresented by the following C computer language code:

    ______________________________________                                        slant8×1(s,d,fwd)                                                                  // s = pointer to input column or row                                         // d = pointer to output column or row                             int s[],d[],fwd;                                                                         // fwd = 1 for forward DST, 0 for                                             inverse DST                                                        int r1,r2,r3,r4,r5,r6,r7,r8;                                                  int t,t1,*p;                                                                  if (fwd)   // apply forward DST                                               {                                                                             p = s;                                                                        r1 = *p++; // store value pointed to by p to r1 and                                      // then increment p                                                r2 = *p++;                                                                    r3 = *p++;                                                                    r4 = *p++;                                                                    r5 = *p++;                                                                    r6 = *p++;                                                                    r7 = *p++;                                                                    r8 = *p++;                                                                    SlantPart1;                                                                   SlantPart2;                                                                   SlantPart3;                                                                   SlantPart4;                                                                   p = d;                                                                        *p++ = r1;                                                                    *p++ = r4;                                                                    *p++ = r8;                                                                    *p++ = r5;                                                                    *p++ = r2;                                                                    *p++ = r6;                                                                    *p++ = r3;                                                                    *p++ = r7;                                                                    }                                                                             else       // apply inverse DST                                               {                                                                             p = s;                                                                        r1 = *p++;                                                                    r4 = *p++;                                                                    r8 = *p++;                                                                    r5 = *p++;                                                                    r2 = *p++;                                                                    r6 = *p++;                                                                    r3 = *p++;                                                                    r7 = *p++;                                                                    SlantPart4;                                                                   SlantPart3;                                                                   SlantPart2;                                                                   SlantPart1;                                                                   p = d;                                                                        *p++ = r1;                                                                    *p++ = r2;                                                                    *p++ = r3;                                                                    *p++ = r4;                                                                    *p++ = r5;                                                                    *p++ = r6;                                                                    *p++ = r7;                                                                    *P++ = r8;                                                                    }                                                                             }                                                                             ______________________________________                                    

where SlantPart1, SlantPart2, SlantPart3, SlantPart4 are four macrosdefined as follows:

    ______________________________________                                        #define SlantPart1                                                            bfly(r1,r4);                                                                  bfly(r2,r3);                                                                  bfly(r5,r8);                                                                  bfly(r6,r7);                                                                  define SlantPart2                                                             bfly(r1,r2);                                                                  reflect(r4,r3);                                                               bfly(r5,r6);                                                                  reflect(r8,r7);                                                               define SlantPart3                                                             bfly(r1,r5);                                                                  bfly(r2,r6);                                                                  bfly(r7,r3);                                                                  bfly(r4,r8);                                                                  #define SlantPart4                                                            t  = r5 - (r5>>3) + (r4>>1);     t   = 7 8 r5 + 1 2 r4                        r5 = r4 - (r5>>3) - (r5>>1);     r5  = 7 8 r4 + 1/2 r5                        r4 = t;                                                                       ______________________________________                                    

The macros bfly and reflect are defined as follows:

    ______________________________________                                        bfly(x,y):                                                                    t = x+y;                                                                      y = x-Y;                                                                      x = t;                                                                        #define reflect(s1,s2)                                                                       for forward transform                                             t = 11 8 s1 + 9 16 s2                                                      t = s1 + (s1>>2) + (s1>>3) + (s2>>1) + (s2>>4);                                  s2 = -11 8 s2 + 9 16 s1                                                    s2 = -s2 - (s2>>2) - (s2>>3) + (s1>>1) + (s1>>4);                             s1 = t;                                                                       #define reflect(s1,s2)                                                                       for inverse transform                                             t = 5 4 s1 + 1 2 s2                                                        t = s1 + (s1>>2) + (s2>>1);                                                      s2 = -5 4 s2 + 1 2 s1                                                      s2 = -s2 - (s2>>2) + (s1>>1);                                                 s1 = t;                                                                       ______________________________________                                    

The (8×1) DST is preferably applied to all of the columns first and thento all of the rows.

In a preferred embodiment, after applying the (8×1) inverse DST to allof the columns and rows, the 64 values in the resulting (8×8) array arerounded and truncated as follows:

    ______________________________________                                        for (i=0; i<8; i++)                                                            for (j=0; j<8; j++)                                                            array[i][j] = (array[i][j] + 4) >> 3                                        ______________________________________                                    

In an alternative preferred embodiment, rounding and truncated isperformed by adding 4 to the DC coefficient (i.e., the (0,0) DSTcoefficient) before performing the inverse DST, and then truncating theresulting (8×8) array as follows:

    ______________________________________                                        for (i=0; i<8; i++)                                                            for (j=0; j<8; j++)                                                            array[i][j] = (array[i][j] >> 3                                             ______________________________________                                    

Those skilled in the art will understand that this latter preferredembodiment is more computationally efficient.

For the forward transform, instead of implementing a separateround/truncate step, rounding and truncating are built into thequantization step by making the quantizers 8 times larger. Those skilledin the art will understand that this provides computational efficiencyand may also provide a slightly more accurate result.

Pseudo-SIMD Dual Slam Transform

For intra blocks, the forward DST converts 7-bit unsigned componentsignals in the spatial domain into 11-bit DST coefficients in thespatial frequency domain. For inter blocks, the FDST converts 8-bitsigned component difference signals in the spatial domain into 11-bitDST coefficients in the spatial frequency domain. The inverse DST doesthe reverse. To allow for error introduced by the quantization anddequantization of the DST coefficients, 12-bit precision in the DSTcoefficients is preferably provided.

As described earlier in this specification in the section entitled"Preferred Hardware Configuration for Conferencing System," hostprocessor 202 is preferably an Intel® processor. Intel® processorsoperate on signals stored in 32-bit registers. Since only 12 bits areused to perform DST processing, in a preferred embodiment, hostprocessor 202 uses its 32-bit registers to apply the inverse DST to twodifferent (8×8) blocks of DST coefficients at the same time (i.e., inparallel). Those skilled in the art will understand that, in this way,host processor 202 applies the inverse DST in a pseudo-SIMD(single-instruction, multiple-data) fashion. In addition, pixelprocessor 302 of FIG. 3 preferably applies both the forward and inverseDST in pseudo-SIMD fashion.

Pseudo-SIMD is a technique wherein two or more data sets are operatedupon simultaneously in the space of a single register. Since Intel®processors do not have a true SIMD design, sign extension of signals inthe low-order portions of the registers is preferably accounted for, toavoid corruption of the signals in the high-order portions of theregisters. In addition, accounting is preferably made for bit shiftingoperations which may shift bits from the high-order portions into thelow-order portions of the registers, or vice versa.

As described in the previous section, the discrete slant transformpreferably involves multiplying signals by such constants as 7/8, 1/2,and 5/4. These multiplications are preferably implemented usingright-shifts and adds or subtracts. In the absence of pseudo-SIMD, suchshifts may shift insignificant fractional parts of signals off the rightend of the registers. With pseudo-SIMD, shifting right may propagatebits from signals residing in the high-order register portions into thehigh-order bits of the signals residing in the low-order registerportions.

To avoid corruption of the low-order signals, the bits shifted down fromthe right end of the high-order signals may be masked off. For example,to compute 7/8 of the signals stored in register X, the followingoperation may be implemented:

    X-((X>>3)& MASK)

where MASK masks off those bits shifted from the signal stored in thehigh-order register portion into the low-order register portion. Afterthis operation, the register contains 7/8 of each of the originalsignals, except when the signal in the low-order register portion isnegative. In this case, the bits shifted into the low-order registerportion from the high-order register portion are preferably masked on,rather than masked off. Testing the sign of the signal in the low-orderregister portion and deciding whether to mask shifted bits on or offwould be computationally expensive and are preferably avoided.

Referring now to FIG. 23, there is shown a representation of a preferredpartitioning scheme for each 32-bit register for pseudo-SIMD inverse DSTprocessing according to the present invention. Under pseudo-SIMD IDSTprocessing, each 32-bit register is partitioned for two signals: ahigh-order signal and a low-order signal. The high-order signal isstored in the 11-bit high-order register portion and the low-ordersignal is stored in the 21-bit low-order register portion. Each of thetwo signals preferably corresponds to a similar location within an (8×8)block. For example, if the high-order signal corresponds to the (i,j)component of the first (8×8) block, then the low-order signalcorresponds to the (i,j) component of the second (8×8) block.

The low-order signal is preferably biased by adding a bias value ofmagnitude sufficient to skew negative low-order signals to anon-negative representation. Since the preferred IDST transforms pairsof low-order DST coefficients (A and B) to generate both (A+B) and (A-B)signals, the bias value for A is preferably sufficiently larger than thebias value for B, to ensure that both (A+B) and (A-B) are biased into anon-negative representation. As a result, the bias values for the DSTcoefficients are preferably not uniform.

Referring now to FIG. 24, there is shown a representation of a preferredset of bias values for the IDST processing of the present invention.Each number corresponds to the value that is used in the upper 10 bitsof the low-order register portion to bias the low-order signal. Thepreferred bias values of FIG. 24 were derived empirically. In general, apreferred set of bias values satisfies all of the following conditions:

(1) Throughout the IDST processing, all signals values in the low-orderregister portion remain non-negative.

(2) Throughout the IDST processing, there is no corruption of thehigh-order signal with bits from the low-order register portion.

(3) Throughout the IDST processing, all transformed bias values remainnon-negative.

(4) After the IDST column and row operations are complete, thetransformed bias values do not have to be subtracted to recover thecorrect component signals.

Referring now to FIG. 25, there is shown, for illustrative purposes, arepresentation of the process of loading a 32-bit register with signalscorresponding to the DC coefficients of two (8×8) blocks, where the DCcoefficient of the first (high-order) block is 100 and the DCcoefficient of the second (low-order) block is 37. Register 2502 has thebias signal loaded into the skew field (i.e., bits 11-20 of the 32-bitregister). As shown in FIG. 24, the bias signal for the low-order DCcoefficient (i.e., the (0,0) DST coefficient) has a value of 212.

Register 2504 has the 11-bit unbiased low-order DST coefficient signalwith a value of 37 loaded into bits 0-10. Register 2506 contains the sumof register 2502 and register 2504. The signal contained in register2506 is the biased low-order signal.

Register 2508 has the 11-bit high-order DST coefficient signal with avalue of 100 loaded into bits 21-31. Register 2510 contains the resultof combining the high-order contents of register 2508 with the low-ordercontents of register 2506 by adding together registers 2508 and 2506.Register 2510 represents the state of the 32-bit register at thebeginning of IDST processing for this example.

Referring now to FIG. 26, there is shown, for illustrative purposes, arepresentation of the process of loading a 32-bit register similar tothat of FIG. 25, except that the low-order signal corresponds to a DCcoefficient difference with a value of -37. As with register 2502 ofFIG. 25, register 2602 of FIG. 26 contains the DC bias value of 212.

Register 2604 contains the unbiased low-order signal of -37. Note thatthe sign bits for the negative signal extends to the MSB of 32-bitregister. Register 2606 contains the sum of register 2602 and register2604. Note that the biased low-order signal contained in register 2606is non-negative.

As with register 2508, register 2608 contains the high-order signal witha value of 100. Register 2610 contains the result of combining thehigh-order contents of register 2608 with the low-order contents ofregister 2606 by adding together registers 2606 and 2608. Register 2610represents the state of the 32-bit register at the beginning of IDSTprocessing for this example.

The function slant8×1 (defined in the previous section of thespecification) represents the preferred DST column and row operations.Referring again to FIG. 24, those skilled in the art will understandthat the IDST column operation propagates the full column DC value intoeach of the 8 elements of the column. The column DC value is the valuein row 0 for that column (e.g., 170 for column 3). Given that theslant8×1 function is preferably applied first to the columns and then tothe rows, the biases of FIG. 24 have been selected to ensure that, afterthe IDST column operations are completed, the proper biases will alreadybe in place for the subsequent IDST row operations.

This selection involves adding the appropriate row bias value to thecolumn DC value for each column. For example, the column DC signal forcolumn 3 is the (0,3) signal. The preferred bias value for this columnDC signal is 170, which is the column bias value of 106 plus the rowbias value of 64. The IDST column operation propagates the column DCbias value of 170 into each element of column 3. In the final steps ofthe IDST column operation, the transformed column bias values aresubtracted leaving the appropriate row bias value of 64 in each elementof column 3.

In order to increase the efficiency of IDST processing, a preferredembodiment of the present invention takes advantage of the fact that,for typical video images, many DST coefficients in a non-empty (8×8)block will be zero. The likelihood of a DST coefficient being zeroincreases for components further away from the DC component (the (0,0)component). Thus, DST coefficients in the bottom half of each column,and those in the right half of each row, are more likely to be zero thanthose in the other halves.

Referring now to FIG. 27, there is shown a representation of the 32-bittotal column complexity mask that is used to characterize the"zero-ness" of the (8×8) blocks of DST coefficients, according to apreferred embodiment of the present invention. The 32-bit total columncomplexity mask comprises eight 4-bit column complexity masks. For each4-bit column complexity mask,

Bit 0 (i.e., the LSB) corresponds to row 0;

Bit 1 corresponds to row 1;

Bit 2 corresponds to rows 2 and 3; and

Bit 3 corresponds to rows 4, 5, 6, and 7.

For those DST coefficients of column i that are non-zero, thecorresponding bit of column complexity mask i is set to 1. A bit ofcolumn complexity mask i is set to 0, if all of the DST coefficients inthe rows corresponding to that bit are zero.

Referring now to FIG. 28, there is shown, for illustrative purposes, arepresentation of an (8×8) block 2800 of DST coefficients. In block2800, 0 indicates a zero DST coefficient and X indicates a non-zero DSTcoefficient.

Referring now to FIG. 29, there is shown a representation of the eight4-bit column complexity masks that comprise the 32-bit total columncomplexity mask corresponding to the block 2800 of FIG. 28. For example,column complexity mask 0 (corresponding to column 0 of block 2800)contains the 4-bit value (1101), where (from right to left):

Bit 0 is 1 because DST coefficient (0,0) is non-zero,

Bit 1 is 0 because DST coefficient (1,0) is zero,

Bit 2 is 1 because at least one of DST coefficients (2,0) and (3,0) isnon-zero, and

Bit 3 is 1 because at least one of DST coefficients (4,0), (5,0), (6,0),and (7,0) is non-zero.

And, analogously, for column complexity masks 1-7. Note that the 4-bitcolumn complexity masks for columns 4-7 each contain the value (0000).

The 4-bit column complexity masks are preferably used to control theimplementation of the column DST operations to make the implementationmore efficient. Those skilled in the art will understand that thecomputations of the column DST operation (defined previously as thefunction slant8×1) may be reduced for those columns having one or morezero DST coefficients. In a preferred embodiment, the present inventionsupports five different implementations of the column DST operation.

Each column may initially be assigned a column DST operation. Table IXidentifies how the column DST operation are initially assigned tocolumns, where slant4×1, slant2×1, and slant1×1 are reduced column DSToperations and null indicates no processing required.

                  TABLE IX                                                        ______________________________________                                        Initial Assignment of Column DST Operations and Final                         Assignment of Row DST Operations.                                             4-bit                                                                         Complexity      Mask    DST                                                   Mask            Values  Operation                                             ______________________________________                                        (1xxx)           8-15   slant8×1                                        (01xx)          4-7     slant4×1                                        (001x)          2-3     slant2×1                                        (0001)          1       slant1×1                                        (0000)          0       null                                                  ______________________________________                                    

For inverse DST processing, the reduced DST operation slant4×1 is basedon the DST operation slant8×1 using the following assignments:

r1=*p++;

r4=*p++;

r8=*p++;

r5=*p++;

r2=0;

r6=0;

r3=0;

r7=0;

The reduced IDST operation slant2×1 is based on the DST operationslant8×1 using the following assignments:

r1=*p++;

r4=*p++;

r8=0;

r5=0;

r2=0;

r6=0;

r3=0;

r7=0;

The reduced IDST operation slant1×1 is based on the DST operationslant8×1 using the following assignments:

r1=*p++;

r4=0;

r8=0;

r5=0;

r2=0;

r6=0;

r3=0;

r7=0;

Those skilled in the art will understand that the assignments for thereduced DST operations slant4×1, slant2×1, and slant1×1 provideopportunity for additional optimization. The slant1×1 operationpropagates the DC coefficient to each of the outputs, while the nulloperation does not. The null operation is preferably only used for thelast four columns, or the last six columns, or the last seven columns.For example, if columns 0 and 5 are the only non-zero columns, then therow transforms will use the slant8×1 operation. Since, in this example,the bias values of the top row are to be propagated to the rest of therows, the null operation is not used for any of the columns. If,however, columns 0 and 2 are the only non-zero columns, then the rowtransforms may use the slant4×1 operation. Therefore, in this example,the null operation may be used for columns 4 through 7, but not 1 and 3,to which the slant1×1 operation is applied to propagate the bias valuesfor the subsequent row operation slant4×1.

Each column is processed according to its own complexity. Just beforestoring the outputs of the column transforms, the transformed biasvalues for the column are removed, leaving only the biases appropriatefor the row transforms. These biases are propagated from element zero ofeach column to all the elements of the column, and are the original biasfor element zero, minus 106. This is done by each of the columntransformers, though each one has to subtract different values for thetransformed biases.

The only case where a column is not processed according to its originalcomplexity, is when the mask is 0000 for the column, but the slant1×1operation is applied to propagate the bias for the subsequent rowoperations. we need to perform slant1×1 instead of Null, as I describein my comments above.

The total column complexity mask of FIG. 27 is also used to generate a4-bit row complexity mask, where:

Bit 0 (i.e., the LSB) corresponds to column 0;

Bit 1 corresponds to column 1;

Bit 2 corresponds to columns 2 and 3; and

Bit 3 corresponds to columns 4, 5, 6, and 7.

A bit of the 4-bit row complexity mask is set to 0, if all of the DSTcoefficients in all of the corresponding rows are zero. Otherwise, thebit is set to 1. Thus, for the example of FIGS. 28 and 29, the 4-bit rowcomplexity mask contains the value (0111). Those skilled in the art willunderstand that the 4-bit row complexity mask may be generated directlyfrom the 32-bit total column complexity mask.

Table IX may be used to select the row DST operation to apply to each ofthe eight rows of the (8×8) block, where the four possible row DSToperations are the slant8×1, slant4×1, slant2×1, and slant1×1 operationsdescribed above. Those skilled in the art will understand that the nulloperation is preferably not one of the row DST operations, since a nullrow operation implies an empty block. In the example of FIGS. 28 and 29,the slant4×1 row operation may be applied to each of the eight rows ofblock 2800 when implementing the row DST operations (after completingthe column DST operations on the eight columns of block 2800).

Those skilled in the art will understand that the various complexitymasks are used to reduce the computational complexity involved inapplying the inverse DST to an (8×8) block of DST coefficients. In apreferred embodiment in which the inverse DST is applied in pseudo-SIMDfashion to two (8×8) blocks at the same time, it will be understood thatthe complexity of the column and row DST operations is preferablydictated by the greater complexity of the corresponding columns or rowsof the two blocks.

Referring now to FIG. 30, there is shown a process flow diagram of theprocessing implemented by host processor 202 of FIG. 2 to apply theinverse DST in a pseudo-SIMD fashion to two different (8×8) blocks ofDST coefficients during the decoding of encoded video signals of FIG.21, according to a preferred embodiment of the present invention. Theprocessing of FIG. 30 corresponds to step 426 of FIG. 4 and step 2112 ofFIG. 21.

Pseudo-SIMD inverse DST processing begins by initializing an (8×8)dual-block matrix of 32-bit registers by inserting a preferred set ofbias signals into the skew fields of the 32-bit registers (step 3002 ofFIG. 30). The dequantized DST coefficient signals corresponding to afirst (low-order) (8×8) block are added to the low-order portions of the32-bit registers of the dual-block matrix and the total columncomplexity mask is generated corresponding to the first block (step3004).

The dequantized DST coefficient signals corresponding to a second(high-order) (8×8) block are then added into the high-order portions ofthe 32-bit registers of the dual-block matrix and the total columncomplexity mask if updated in accordance with the complexity of thesecond block (step 3006). The updating of the total column complexitymask is functionally equivalent to generating a separate total columncomplexity mask for the second block and then "OR"ing the two maskstogether. The resulting updated total column complexity mask representsthe more complex of each pair of corresponding columns, where column iof the first block corresponds to column i of the second block.

The column DST operations are then applied to the columns of thedual-block matrix (step 3008), where the complexity of the column DSToperations is dictated by the total column complexity mask, as describedearlier in this section of the specification.

The appropriate transformed column biases are then subtracted from the(8×8) matrix that is generated during the column DST operations (step3010). Those skilled in the art will understand that the subtraction oftransformed column biases is also preferably dictated by the totalcolumn complexity mask.

The row complexity mask is generated from the total column complexitymask (step 3012) and a row DST operation is applied to each of the eightrows of the matrix (step 3014), where the complexity of the row DSToperation is dictated by the row complexity mask. As the row DSToperations are applied, the reconstructed component signalscorresponding to the two (8×8) blocks is preferably shifted and writtenout from the 32-bit registers to appropriate memory locations of areconstructed bitmap. Those skilled in the art will understand that,after the row DST operation, the component signals corresponding to thelow-order block are contained in bits 3-10 of the 32-bit registers ofthe dual-block matrix and the component signals corresponding to thehigh-order block are contained in bits 23-30 of the 32-bit registers ofthe dual-block matrix. The other bits contain either insignificantfractional bits (i.e., bits 0-2 and 20-22) or transformed bias signals(i.e., bits 11-19).

Block Edge Filtering

Referring again to FIG. 18, after the temporal post-filter is applied,block edge filtering is applied if selected (step 1816 of FIG. 18).Block edge filtering improves visual quality, especially during periodsof high motion, by reducing blocking artifacts along the edges of the(8×8) blocks. If selected, block edge filtering is preferably appliedonly to the Y component signals.

Referring now to FIG. 31, there is shown a representation of the fourblock edges between an (8×8) block of component signals and its fourneighboring blocks. According to a preferred embodiment, for each of thefour edges of each (8×8) block, a test is applied to determine whetherto apply block edge filtering. A preferred test may be expressed asfollow:

if:

q₁ ≧T and if Block 1 is not {empty and inter and MV=0}or

q₂ ≧T and if Block 2 is not {empty and inter and MV=0},

then:

apply the block edge filter to the corresponding edge,

where q₁ is the quantization level of Block 1, q₂ is the quantizationlevel of Block 2, and T is a specified threshold level (preferably, 12).Blocks 1 and 2 are the two adjacent blocks that define the edge inquestion. According to the test, either Block 1 or Block 2 is not anempty inter block with a motion vector of 0.

The quantization portion of the test (i.e., q_(i) ≧T) causes block edgefiltering to be applied if the block on either side of the edge has ahigh quantization level, in which case there is probably a blockyartifact at this edge. The second portion of the test (i.e., Block i isnot {empty and inter and MV=0}) prevents block edge filtering from beingapplied in stationary areas of the image, which are presumably highquality.

If the test is satisfied, then block edge filtering is preferablyapplied to each of the 8 pairs of component signals along thecorresponding edge to replace the B and C component signals, as follows:

x=A+B

y=B+C

z=C+D

B=(x+y)>>2

C=(y+z)>>2

where A, B, C, and D are the component signals as shown in the examplesof FIG. 31. Those skilled in the art will understand that the abovepreferred block edge filter is equivalent to replacing B with a 121filter of ABC, and C with a 121 filter of BCD. In a preferredembodiment, the block edge filter is applied first to vertical edges andthen to horizontal edges. Those skilled in the art will understand thatthis order may be reversed without significant impact to the finalresult.

Variable-Length Decoding

As described earlier in this specification in the section entitled"Variable-Length Encoding," each Huffman-encoded video signal of thepresent invention comprises a prefix followed by a number of code bits(also known in the art as free bits or data bits), where the prefix andcode bits vary in length from signal to signal, but where a particularprefix determines the number of code bits. Decoding Huffman-encodedsignals comprises parsing the encoded bitstream into individualvariable-length signals and mapping the variable-length signals to theircorresponding codebook values. The decoding of Huffman-encoded videosignals may be implemented different ways.

One decoding method is to read in one bit at a time from the encodedbitstream, append the new bit to a running prefix field, determinewhether the prefix field is identical to one of the predefined signalprefixes, and either read in another bit from the bitstream to repeatthe processing (if the prefix field is not one of the signal prefixes)or read in and decode the predefined number of code bits (if the prefixfield is one of the signal prefixes).

Under this decoding method, the current bit location within the encodedbitstream may be represented by a byte pointer and a bit pointer. Aftereach variable-length signal is decoded, the byte and bit pointers areupdated according to the number of bits in the signal. This updating maybe accomplished using the following processing:

    ______________________________________                                                add code length to bit pointer                                                loop while (bit pointer >=8){                                                   increment byte pointer by 1;                                                  decrement bit pointer by 8;                                                   }                                                                   ______________________________________                                    

For example, assume that the bit pointer after the previous encodedsignal was 7 and that the current encoded signal is 14 bits long. Afterdecoding the current encoded signal, the bit pointer is updated to 7+14or 21. Since 21 is greater than 8, the byte pointer is incremented by 1and the bit pointer is decremented by 8. The bit pointer is then 21-8 or13. Since the bit pointer value (13) is still greater than 8, the bytepointer is again incremented by 1 and the bit pointer is againdecremented by 8 to yield a bit pointer of 5 for the next encodedsignal.

Those skilled in the art will understand that the loop processing of theabove scheme for pointer updating involves the overhead of jumps andtests and, as in the example, possible multiple executions.

After adding in the code length, the lower three bits of the bit pointerrepresent the desired value for the updated bit pointer, while thehigher bits indicate the value to add to the byte pointer. One way toupdate the bit and byte pointers is, after saving the three lower bitsof the bit pointer, to shift the bit pointer right by three bits toyield the value to add to the byte pointer. This method involvesshifting bits and the use of one additional register, since the lowerthree bits are saved for the updated bit pointer.

Another method is to maintain a single cumulative bit pointer. Underthis method, the lower three bits provides the bit address and the bitpointer shifted right three bits provides the byte address.

Referring now to FIG. 32, there is shown a process flow diagram ofbit/byte pointer update processing, according to a preferred embodimentof the present invention. The processing of FIG. 32 may be representedas follows:

add code length to bit pointer

add Table[bit pointer] to byte pointer

mask out all but lower 3 bits of bit pointer

This processing is based on a lookup table that maps the possible bitpointer values to the values to be added to the byte pointer. The bitpointer is used as the index to the table, where:

    ______________________________________                                        Table[bit pointer] = 0                                                                         for bit pointer = 0, . . . ,7                                Table[bit pointer] = 1                                                                         for bit pointer = 8, . . . ,15                               Table[bit pointer] = 2                                                                         for bit pointer = 16, . . . ,23                                               etc.                                                         ______________________________________                                    

For the previous example where the bit pointer is 7 and the code lengthis 14, the bit pointer is updated by the code length to yield 7+14 or 21(step 3202 of FIG. 32). The byte pointer is then incremented by thevalue (2) retrieved from the lookup table using the updated bit pointer(21) as the index (step 3204). The bit pointer (21) is then updated bymasking out all but the lower three bits to yield an updated bit pointerof 5 (step 3206).

Those skilled in the art will understand that the bit/byte pointerupdate processing of FIG. 32 may also be used to maintain bit and bytepointers for applications, other than Huffman decoding, in which bitlocation is tracked in a byte-based processing system.

Methods which involve reading the encoded bitstream one bit at a timemay be prohibitively expensive from the perspective of CPU processingbandwidth. Another method for decoding Huffman-encoded signals is toread in from the bitstream at each cycle enough bits to complete a testfield of length equal to that of the longest Huffman-encoded signal. Thetest field is then used as the index to a lookup table that maps fromeach possible test field value to (1) the appropriate decoded signal and(2) the number of bits in the test field to retain for the next testfield (for those encoded signals that are shorter than the longestHuffman-encoded signal). This method may be prohibitively expensive dueto the large size of the lookup table required to map from everypossible test field value.

Referring now to FIG. 33, there is shown a process flow diagram of theprocessing of decoder 3300 implemented by host processor 3300 of FIG. 2to decode Huffman-encoded video signals, according to a preferredembodiment of the present invention. Decoder 3300 is implemented todecode both the Huffman-encoded macroblock signals and theHuffman-encoded block signals of the present invention. Decoder 3300comprises a state-machine implementation whose states dictate whetherthe bits of the current bitstream byte correspond to prefixes or freebits or both and how many more bits are needed to move to the nextstate. Decoder 3300 reads Huffman-encoded signals from the encodedbitstream in one-byte increments and writes out decoded signals to anoutput stream in one-byte increments.

As described earlier in this specification in the section entitled"Variable-Length Encoding," Table II presents the Huffman codebook forencoding macroblock signals and Table III presents the Huffman codebookfor encoding block signals. According to Tables II and III,Huffman-encoded macroblock signals are either 2, 4, 6, or 8 bits long,while Huffman-encoded block signals are either 2, 4, 6, 8, 10, 12, or 14bits long. Each byte in the Huffman-encoded bitstream may thereforecomprise a whole or part of one or more Huffman-encoded signals.

Because each Huffman-encoded signal comprises an even number of bits andbecause the sequences of Huffman-encoded macroblock signals begin onbyte boundaries, Huffman-encoded signals always begin on even bits(i.e., bits 0, 2, 4, or 6) and end on odd bits (i.e., bits 1, 3, 5, or7). Based on these facts and the known lengths of the allowableHuffman-encoded signals, a relatively small set of states can be definedto cover all the possible permutations for the status of decoder 3300after each processing cycle.

In each processing cycle, decoder 3300 determines that either (1) thecurrent Huffman-encoded signal terminates at either bit 1, 3, 5, or 7 ofthe current bitstream byte or (2) the current Huffman-encoded signaldoes not terminate within the current bitstream byte. If the currentHuffman-encoded signal does not terminate within the current bitstreambyte, then, during the next processing cycle, decoder 3300 reads in thenext bitstream byte to continue processing the current Huffman-encodedsignal.

If the current Huffman-encoded signal terminates within the currentbitstream byte, then decoder 3300 begins decoding the nextHuffman-encoded signal during the next processing cycle. If the currentHuffman-encoded signal terminates at bit 7 of the current bitstreambyte, then decoder 3300 reads in the next bitstream byte during the nextprocessing cycle; otherwise, the current Huffman-encoded signalterminates on either bits 1, 3, or 5, and decoder 3300 begins processingthe next Huffman-encoded signal during the next processing cycle usingthe same bitstream byte.

The state at the beginning of a processing cycle and the value of theappropriate bits of the current byte determine:

(1) The contribution to be made by decoder 3300 to an accumulator duringthe current processing cycle;

(2) The state of decoder 3300 at the beginning of the next processingcycle;

(3) Whether or not to increment the input pointer used by decoder 3300to read a byte from the encoded bitstream during the next processingcycle; and

(4) Whether or not to re-initialize the accumulator and increment theoutput pointer used by decoder 3300 to write out the accumulator to theoutput stream during the next processing cycle.

The appropriate bits of the current byte depend upon the current state.

Referring again to FIG. 33, decoder 3300 is initialized at the start ofdecoding a stream of Huffman-encoded macroblock signals (step 3302 ofFIG. 33). Decoder 3300 is initialized to the state signifying that themacroblock signal prefix begins at bit 0 (i.e., MPrefixAt0 of Table Xbelow). Decoder 3300 need not be re-initialized at the start of decodinga stream of Huffman-encoded block signals, since the block signalsimmediately follow the macroblock signals for a given slice of a videoframe. Decoder 3300 handles the transition from decoding macroblocksignals to decoding block signals. Since a stream of Huffman-encodedblock signals may begin at either bits 0, 2, 4, or 6 of the currentbyte, there are four different states for the beginning of decodingblock signals (i.e., BlkDataAt0, BlkDataAt2, BlkDataAt4, and BlkDataAt6of Table XI below). The initialization of step 3302 also involvesinitializing the input and output pointers and the accumulator.

After initialization, decoder 3300 reads in the byte from the encodedbitstream specified by the input pointer and masks the byte according tothe current state (step 3304). Masking is used to eliminate (i.e., setto 0) those bits of the current byte that are not relevant to thecurrently available state transitions. Step 3304 may be represented bythe following C language computer code:

    B=*pIn & MASK[STATE]

where B is the masked byte, *pin retrieves the byte specified by the pInpointer, MASK is a lookup table of the possible masks, and STATE is avalue assigned to the current state. The possible masks may berepresented as (11111111), (00111111), (00001111), (00000011),(00000000), (11000000), (11110000), and (11111100).

Decoder 3300 uses the masked byte B in conjunction with the currentstate STATE to access the following four lookup tables:

Contrib[][] Specifies the contribution to the 8-bit accumulator.

NextState[][] Specifies a 6-bit value corresponding to the next state.

IncIn[][] Specifies a 1-bit flag indicating whether the input pointer(pIn) is to be incremented.

IncOut[][] Specifies a 1-bit flag indicating whether the accumulator isto be initialized and whether the output pointer (pOut) is to beincremented.

The specified contribution (Contrib[B][STATE]) is added to theaccumulator (step 3306), a register that holds the running decoded valuecorresponding to those bits of the current Huffman-encoded signal thathave been processed. The accumulator is then written out to the outputstream to the location specified by the output pointer (pOut) (step3308). If the output pointer pOut was not updated in the previousprocessing cycle, then step 3308 writes over what was previouslywritten.

If the input pointer flag (Incln[B][STATE]) indicates that the inputpointer pIn is to be incremented (step 3310), then the current bitstreambyte has been completely processed and the input pointer pIn isincremented to ensure that the next bitstream byte is read during thenext processing cycle (step 3312).

If the output pointer flag (IncOut[B][STATE]) indicates that the outputpointer pOut is to be incremented (step 3314), then the currentHuffman-encoded signal is complete. In that case, the output pointerpOut is incremented (step 3316) and the accumulator is initialized to 0(step 3318).

The next state (NextState[B][STATE]) for decoder 3300 for the beginningof the next processing cycle is then retrieved (step 3320). If the nextstate does not indicate the end of the current slice (step 3322), thendecoder 3300 returns to step 3304 to repeat the processing for the nextprocessing cycle. Otherwise, the next state is the terminal state anddecoding of the Huffman-encoded signals of the current slice ends.

Table X presents the set of possible states for decoder 3300 fordecoding Huffman-encoded macroblock signals. Table XI presents the setof possible states for decoder 3300 for decoding Huffman-encoded blocksignals.

                  TABLE X                                                         ______________________________________                                        Possible States for Parsing Huffman-Encoded                                   Macroblock Signals.                                                           STATE     MEANING                                                             ______________________________________                                        MPrefixAt0                                                                              Prefix starts at bit 0 of current byte.                             MPrefixAt2                                                                              Prefix starts at bit 2 of current byte.                             MPrefixAt4                                                                              Prefix starts at bit 4 of current byte.                             MPrefixAt6                                                                              Prefix starts at bit 6 of current byte.                             MGot2Prefix                                                                             Bit 0 of current byte is the third bit (bit                                   2) of prefix started in previous byte.                              MNeed2Code                                                                              Bits 0-1 of current byte complete free bits.                        MNeed4Code                                                                              Bits 0-3 of current byte complete free bits.                        MNeed2Non0                                                                              Bits 0-1 of current byte complete free bits,                                  but they are not both 0.                                            MNeed2Non1                                                                              Bits 0-1 of current byte complete free bits,                                  but they are not both 1.                                            MNeed4Non0                                                                              Bits 0-3 of current byte complete free bits,                                  but they are not all 0.                                             MNeed4Non1                                                                              Bits 0-3 of current byte complete free bits,                                  but they are not all 1.                                             ______________________________________                                    

                  TABLE XI                                                        ______________________________________                                        Possible States for Parsing Huffman-Encoded Block Signals.                    STATE      MEANING                                                            ______________________________________                                        BPrefixAt0 Prefix starts at bit 0 of current byte.                            BPrefixAt2 Prefix starts at bit 2 of current byte.                            BPrefixAt4 Prefix starts at bit 4 of current byte.                            BPrefixAt6 Prefix starts at bit 6 of current byte.                            BGot2Prefix                                                                              Bit 0 of current byte is bit 2 of prefix.                          BGot4Prefix                                                                              Bit 0 of current byte is bit 4 of prefix.                          BGot8PAt4  Bit 4 of current byte is bit 8 of prefix.                          BGot6Prefix                                                                              Bit 0 of current byte is bit 6 of prefix.                          BGot8Prefix                                                                              Bit 0 of current byte is bit 8 of prefix.                          BNeed2Code Bits 0-1 of current byte complete free bits.                       BNeed4Code Bits 0-3 of current byte complete free bits.                       BNeed6Code Bits 0-5 of current byte complete free bits.                       BNeed2At4  Bits 4-5 of current byte complete free bits.                       BNeed4At4  Bits 4-7 of current byte complete free bits.                       BNeed6At4  Bits 4-7 of current byte and bits 0-1 of next                                 byte complete free bits.                                           IllegalCode                                                                              Code not allowed.                                                  BEnd       End of block signals (end of slice).                               BlkDataAt0 Block signals begin at bit 0 of current byte.                      BlkDataAt2 Block signals begin at bit 2 of current byte.                      BlkDataAt4 Block signals begin at bit 4 of current byte.                      BlkDataAt6 Block signals begin at bit 6 of current byte.                      ______________________________________                                    

Tables XII-XV present the information encoded in the four lookup tablesContrib[][], NextState[][], IncIn[][], and IncOut[][] which define theallowable state transitions used by decoder 3300. Each line of TablesXII-XV represents a macro (or abstract rule) that defines a set of rulesfor the allowable state transitions. The number of rules defined by eachmacro is the number of possible combinations of the masked byte for thatmacro as defined below.

Column (1) in Tables XII-XV is a representation of the masked bytes (B)corresponding to the possible current byte values. Column (2) is thecurrent state (STATE) of decoder 3300. The masked byte and the currentstate are the indices for the lookup tables that map to Columns 4-6.Column 4 is the next state. Column 3 is a base value for thecontribution that gets added to the accumulator. Column 5 is thebitstream pointer flag, where 1 means increment the bitstream pointer.Column 6 is the output pointer flag, where 0 means increment the outputpointer and initialize the accumulator.

The masked bytes in Column (1), in which bit 0 is the right-most bit andbit 7 is the left-most bit, are represented with the followingdefinitions:

0 Bit is zero.

1 Bit is one.

X Bit may be either zero or one.

Y Bit may be either zero or one, but not all Ys in the byte are zero.

Z Bit may be either zero or one, but has been masked to zero in thecurrent state of decoder 3300.

A If bit is zero, contributes 0 to index. If one, contributes 32.

B If bit is zero, contributes 0 to index. If one, contributes 16.

C If bit is zero, contributes 0 to index. If one, contributes 8.

D If bit is zero, contributes 0 to index. If one, contributes 4.

E If bit is zero, contributes 0 to index. If one, contributes 2.

F If bit is zero, contributes 0 to index. If one, contributes 1.

a-f Same as A-F, but there are other special cases that are handled byother rules.

Assume, for example, that the first two values to be encoded into theHuffman-encoded macroblock stream are 11 followed by 2. According toTable II, 11 is Huffman-encoded as the 6-bit signal (001101), where(001) is the 3-bit prefix and (101) are the three free bits. Similarly,2 is Huffman-encoded as the 4-bit signal (0100), where (01) is the 2-bitprefix and (00) are the two free bits. In these binary representations,the bits are read from left to right.

In this example, the first byte in the Huffman-encoded bitstream will be(10101100) and the second byte will be (xxxxxx00), where the bits areread from right to left and the xxxxxx bits are 1s or 0s correspondingto the next Huffman-encoded signal(s) in the bitstream. The first bytecontains the entire 6-bit first Huffman-encoded signal (for 11) as wellas the first 2-bits of the second Huffman-encoded signal (for 2), whichhappen to be the entire 2-bit prefix for the second Huffman-encodedsignal. The second byte begins with the last two bits (the free bits) ofthe second Huffman-encoded signal.

Decoder 3300 is initialized to the MPrefixAt0 state in step 3302 of FIG.33. In step 3304, decoder 3300 then reads in and masks (if appropriate)the first bitstream byte (10101100). According to Table XII, for theMPrefixAt0 state, the byte (10101100) is represented as (10FED100),where (100) is the 3-bit prefix of the first Huffman-encoded signal,(FED) are the 3 free bits of the first Huffman-encoded signal, and (10)is the 2-bit prefix of the second Huffman-encoded signal. The state andmasked byte are used as indices to the lookup tables to determine thenext state (MNeed2Code), the base contribution (6), the bitstreampointer flag (1), and the output pointer flag (0).

To determine the total contribution to the accumulator for the currentprocessing cycle, the free bits (FED) are interpreted as follows: SinceD is 1, bit D contributes 4 to the accumulator, since E is 0, bit Econtributes 0, and since F is 1, bit F contributes 1. The totalcontribution is the sum of the contributions from the free bits plus thebase contribution (6) for a total of 4+0+1+6 or 11. The contribution of11 is added to the accumulator (which had been initialized to 0) (instep 3306) and the accumulator value of 11 is then written out to theoutput stream (in step 3308).

Since the bitstream pointer flag is set to 1, the input pointer (pIn) isincremented (in step 3312) to ensure that the second bitstream byte willbe read during the next processing cycle. Since the output pointer flagis set to 0, the output pointer (pOut) is incremented (in step 3316) toensure that the next output signal will not overwrite the first outputsignal, and the accumulator is initialized to 0 (in step 3318).

The next state is set to MNeed2Code (in step 3320). Although the firstHuffman-encoded signal in the bitstream was only 6 bits long, the lookuptables are preferably designed to interpret all or part of certainprefixes that occur at the end of bitstream bytes. Thus, in the example,the lookup tables are designed to recognize that the last two bits inthe first bitstream byte is a complete 2-bit prefix. Rather than have aseparate state that means "start looking for macroblock prefix at bit6," the lookup tables take into account the different possible valuesfor the last two bits and skip directly to the state for the beginningof the next byte (i.e., MNeed2Code).

During the second processing cycle, the initial state is MNeed2Code (seeTable XII) and the next byte is read in from the bitstream and masked tothe representation (ZZZZZZFE). The processing is repeated for these twofree bits to generate a contribution to the accumulator of 2 which iswritten to the output stream. The output pointer is incremented and theaccumulator is initialized, but the input pointer is not incremented.With a next state of MPrefixAt2, the second bitstream byte is used againduring the third processing cycle.

Those skilled in the art will understand that the bits represented byZ's in Tables XII-XV indicate the masking implemented for each state.Masking off bits that are known to be insignificant for the calculationof the next code or code portion, reduces the total number of decoderrules needed. As a result, less memory is required to express the rules,thereby improving system performance by improving the behavior of thedata cache on the CPU.

                                      TABLE XII                                   __________________________________________________________________________    Abstract Rules for Variable-Length Decoding.                                                              Increment                                                                            Signal                                     Byte    Current                                                                              Next    Base Bitstream                                                                            Not                                        Value   State  State   Contrib                                                                            Pointer                                                                              Complete                                   __________________________________________________________________________    XXXXXXF1                                                                              MPrefixAt0                                                                           MPrefixAt2                                                                            0    0      0                                          XXXXFE10                                                                              MPrefixAt0                                                                           MPrefixAt4                                                                            2    0      0                                          X1FED100                                                                              MPrefixAt0                                                                           MPrefixAt6                                                                            6    0      0                                          10FED100                                                                              MPrefixAt0                                                                           MNeed2Code                                                                            6    1      0                                          00FED100                                                                              MPrefixAt0                                                                           MGot2Prefix                                                                           6    1      0                                          fedcb000                                                                              MPrefixAt0                                                                           MPrefixAt0                                                                            14-1 1      0                                          00000000                                                                              MPrefixAt0                                                                           IllegalCode                                                                           255  1      0                                          11111000                                                                              MPrefixAt0                                                                           BlkDataAt0                                                                            255  1      0                                          XXXXF1ZZ                                                                              MPrefixAt2                                                                           MPrefixAt4                                                                            0    0      0                                          X1FE10ZZ                                                                              MPrefixAt2                                                                           MPrefixAt6                                                                            2    0      0                                          10FE10ZZ                                                                              MPrefixAt2                                                                           MNeed2Code                                                                            2    1      0                                          00FE10ZZ                                                                              MPrefixAt2                                                                           MGot2Prefix                                                                           2    1      0                                          FED100ZZ                                                                              MPrefixAt2                                                                           MPrefixAt0                                                                            6    1      0                                          dcb000ZZ                                                                              MPrefixAt2                                                                           MNeed2Code                                                                            14-3 1      1                                          000000ZZ                                                                              MPrefixAt2                                                                           MNeed2Non0                                                                            0    1      1                                          111000ZZ                                                                              MPrefixAt2                                                                           MNeed2Non1                                                                            28   1      1                                          X1F1ZZZZ                                                                              MPrefixAt4                                                                           MPrefixAt6                                                                            0    0      0                                          10F1ZZZZ                                                                              MPrefixAt4                                                                           MNeed2Code                                                                            0    1      0                                          00F1ZZZZ                                                                              MPrefixAt4                                                                           MGot2Prefix                                                                           0    1      0                                          FE10ZZZZ                                                                              MPrefixAt4                                                                           MPrefixAt0                                                                            2    1      0                                          D100ZZZZ                                                                              MPrefixAt4                                                                           MNeed2Code                                                                            6-2  1      1                                          0000ZZZZ                                                                              MPrefixAt4                                                                           MNeed4Non0                                                                            0    1      1                                          1000ZZZZ                                                                              MPrefixAt4                                                                           MNeed4Non1                                                                            16   1      1                                          F1ZZZZZZ                                                                              MPrefixAt6                                                                           MPrefixAt0                                                                            0    1      0                                          10ZZZZZZ                                                                              MPrefixAt6                                                                           MNeed2Code                                                                            0    1      1                                          00ZZZZZZ                                                                              MPrefixAt6                                                                           MGot2Prefix                                                                           0    1      1                                          ZZXXFED1                                                                              MGot2Prefix                                                                          MPrefixAt4                                                                            6    0      0                                          ZZfedcb0                                                                              MGot2Prefix                                                                          MPrefixAt6                                                                            14-1 0      0                                          ZZ000000                                                                              MGot2Prefix                                                                          IllegalCode                                                                           255  1      0                                          ZZ111110                                                                              MGot2Prefix                                                                          BlkDataAt6                                                                            255  0      0                                          ZZZZZZFE                                                                              MNeed2Code                                                                           MPrefixAt2                                                                            2    0      0                                          ZZZZFEDC                                                                              MNeed4Code                                                                           MPrefixAt4                                                                            2    0      0                                          __________________________________________________________________________

                                      TABLE XIII                                  __________________________________________________________________________    Abstract Rules for Variable-Length Decoding.                                                              Increment                                                                            Signal                                     Byte    Current                                                                              Next    Base Bitstream                                                                            Not                                        Value   State  State   Contrib                                                                            Pointer                                                                              Complete                                   __________________________________________________________________________    ZZZZZZfe                                                                              MNeed2Non0                                                                           MPrefixAt2                                                                            14-1 0      0                                          ZZZZZZ00                                                                              MNeed2Non0                                                                           IllegalCode                                                                           255  0      0                                          ZZZZZZfe                                                                              MNeed2Non1                                                                           MPrefixAt2                                                                            14-1 0      0                                          ZZZZZZ11                                                                              MNeed2Non1                                                                           BlkDataAt2                                                                            255-28                                                                             0      0                                          ZZZZfedc                                                                              MNeed4Non0                                                                           MPrefixAt4                                                                            14-1 0      0                                          ZZZZ0000                                                                              MNeed4Non0                                                                           IllegalCode                                                                           255  0      0                                          ZZZZfedc                                                                              MNeed4Non1                                                                           MPrefixAt4                                                                            14-1 0      0                                          ZZZZ1111                                                                              MNeed4Non1                                                                           BlkDataAt4                                                                            255-16                                                                             0      0                                          XYYYYYF1                                                                              BPrefixAt0                                                                           BPrefixAt2                                                                            0    0      0                                          000000F1                                                                              BPrefixAt0                                                                           BGot6Prefix                                                                           0    1      0                                          100000F1                                                                              BPrefixAt0                                                                           BNeed6Code                                                                            0    1      0                                          XYYYFE10                                                                              BPrefixAt0                                                                           BPrefixAt4                                                                            2    0      0                                          0000FE10                                                                              BPrefixAt0                                                                           BGot4Prefix                                                                           2    1      0                                          1000FE10                                                                              BPrefixAt0                                                                           BNeed4Code                                                                            2    1      0                                          X1FED100                                                                              BPrefixAt0                                                                           BPrefixAt6                                                                            6    0      0                                          00FED100                                                                              BPrefixAt0                                                                           BGot2Prefix                                                                           6    1      0                                          10FED100                                                                              BPrefixAt0                                                                           BNeed2Code                                                                            6    1      0                                          FEDC1000                                                                              BPrefixAt0                                                                           BPrefixAt0                                                                            14   1      0                                          DCB10000                                                                              BPrefixAt0                                                                           BNeed2Code                                                                            30-2 1      1                                          BA100000                                                                              BPrefixAt0                                                                           BNeed4Code                                                                             62-14                                                                             1      1                                          B1000000                                                                              BPrefixAt0                                                                           BNeed4Code                                                                            126-14                                                                             1      1                                          10000000                                                                              BPrefixAt0                                                                           BNeed6Code                                                                            206-62                                                                             1      1                                          00000000                                                                              BPrefixAt0                                                                           BGot8Prefix                                                                           0    1      1                                          XYYYF1ZZ                                                                              BPrefixAt2                                                                           BPrefixAt4                                                                            0    0      0                                          0000F1ZZ                                                                              BPrefixAt2                                                                           BGot4Prefix                                                                           0    1      0                                          1000F1ZZ                                                                              BPrefixAt2                                                                           BNeed4Code                                                                            0    1      0                                          X1FE10ZZ                                                                              BPrefixAt2                                                                           BPrefixAt6                                                                            2    0      0                                          00FE10ZZ                                                                              BPrefixAt2                                                                           BGot2Prefix                                                                           2    1      0                                          10FE10ZZ                                                                              BPrefixAt2                                                                           BNeed2Code                                                                            2    1      0                                          FED100ZZ                                                                              BPrefixAt2                                                                           BPrefixAt0                                                                            6    1      0                                          DC1000ZZ                                                                              BPrefixAt2                                                                           BNeed2Code                                                                            14-2 1      1                                          B10000ZZ                                                                              BPrefixAt2                                                                           BNeed4Code                                                                             30-14                                                                             1      1                                          100000ZZ                                                                              BPrefixAt2                                                                           BNeed6Code                                                                            0    1      1                                          000000ZZ                                                                              BPrefixAt2                                                                           BGot6Prefix                                                                           0    1      1                                          __________________________________________________________________________

                                      TABLE XIV                                   __________________________________________________________________________    Abstract Rules for Variable-Length Decoding.                                                              Increment                                                                            Signal                                     Byte    Current                                                                              Next    Base Bitstream                                                                            Not                                        Value   State  State   Contrib                                                                            Pointer                                                                              Complete                                   __________________________________________________________________________    X1F1ZZZZ                                                                              BPrefixAt4                                                                           BPrefixAt6                                                                            0    0      0                                          00F1ZZZZ                                                                              BPrefixAt4                                                                           BGot2Prefix                                                                           0    1      0                                          10F1ZZZZ                                                                              BPrefixAt4                                                                           BNeed2Code                                                                            0    1      0                                          FE10ZZZZ                                                                              BPrefixAt4                                                                           BPrefixAt0                                                                            2    1      0                                          D100ZZZZ                                                                              BPrefixAt4                                                                           BNeed2Code                                                                             6-2 1      1                                          1000ZZZZ                                                                              BPrefixAt4                                                                           BNeed4Code                                                                            0    1      1                                          0000ZZZZ                                                                              BPrefixAt4                                                                           BGot4Prefix                                                                           0    1      1                                          F1ZZZZZZ                                                                              BPrefixAt6                                                                           BPrefixAt0                                                                            0    1      0                                          10ZZZZZZ                                                                              BPrefixAt6                                                                           BNeed2Code                                                                            0    1      1                                          00ZZZZZZ                                                                              BPrefixAt6                                                                           BGot2Prefix                                                                           0    1      1                                          XYYYFED1                                                                              BGot2Prefix                                                                          BPrefixAt4                                                                            6    0      0                                          0000FED1                                                                              BGot2Prefix                                                                          BGot4Prefix                                                                           6    1      0                                          1000FED1                                                                              BGot2Prefix                                                                          BNeed4Code                                                                            6    1      0                                          X1FEDC10                                                                              BGot2Prefix                                                                          BPrefixAt6                                                                            14   0      0                                          00FEDC10                                                                              BGot2Prefix                                                                          BGot2Prefix                                                                           14   1      0                                          10FEDC10                                                                              BGot2Prefix                                                                          BNeed2Code                                                                            14   1      0                                          FEDCB100                                                                              BGot2Prefix                                                                          BPrefixAt0                                                                            30   1      0                                          DCBA1000                                                                              BGot2Prefix                                                                          BNeed2Code                                                                            62-2 1      1                                          DCB10000                                                                              BGot2Prefix                                                                          BNeed2Code                                                                            126-2                                                                              1      1                                          BA100000                                                                              BGot2Prefix                                                                          BNeed4Code                                                                            206-14                                                                             1      1                                          ba000000                                                                              BGot2Prefix                                                                          BNeed4Code                                                                            158-30                                                                             1      1                                          00000000                                                                              BGot2Prefix                                                                          BEnd    255  0      1                                          ZZZZDCB1                                                                              BGot4Prefix                                                                          BNeed2At4                                                                             30   0      1                                          ZZZZBA10                                                                              BGot4Prefix                                                                          BNeed4At4                                                                             62   0      1                                          ZZZZB100                                                                              BGot4Prefix                                                                          BNeed4At4                                                                             126  0      1                                          ZZZZ1000                                                                              BGot4Prefix                                                                          BNeed6At4                                                                             206  0      1                                          ZZZZ0000                                                                              BGot4Prefix                                                                          BGot8PAt4                                                                             0    0      1                                          DCbaZZZZ                                                                              BGot8PAt4                                                                            BNeed2Code                                                                            158-18                                                                             1      1                                          0000ZZZZ                                                                              BGot8PAt4                                                                            BEnd    255  0      1                                          ZZZZDCB1                                                                              BGot6Prefix                                                                          BNeed2At4                                                                             126  0      1                                          ZZZZBA10                                                                              BGot6Prefix                                                                          BNeed4At4                                                                             206  0      1                                          ZZZZba00                                                                              BGot6Prefix                                                                          BNeed4At4                                                                             158-16                                                                             0      1                                          ZZZZ0000                                                                              BGot6Prefix                                                                          BEnd    255  0      1                                          __________________________________________________________________________

                                      TABLE XV                                    __________________________________________________________________________    Abstract Rules for Variable-Length Decoding.                                                              Increment                                                                            Signal                                     Byte    Current                                                                              Next    Base Bitstream                                                                            Not                                        Value   State  State   Contrib                                                                            Pointer                                                                              Complete                                   __________________________________________________________________________    ZZZZZZYY                                                                              BGot8Prefix                                                                          BNeed6Code                                                                            158-78                                                                             0      1                                          ZZZZZZ00                                                                              BGot8Prefix                                                                          BEnd    255  0      1                                          ZZZZZZFE                                                                              BNeed2Code                                                                           BPrefixAt2                                                                            2    0      0                                          ZZZZFEDC                                                                              BNeed4Code                                                                           BPrefixAt4                                                                            14   0      0                                          ZZFEDCBA                                                                              BNeed6Code                                                                           BPrefixAt6                                                                            62   0      0                                          X1FEZZZZ                                                                              BNeed2At4                                                                            BPrefixAt6                                                                            0    0      0                                          00FEZZZZ                                                                              BNeed2At4                                                                            BGot2Prefix                                                                           0    1      0                                          10FEZZZZ                                                                              BNeed2At4                                                                            BNeed2Code                                                                            0    1      0                                          FEDCZZZZ                                                                              BNeed4At4                                                                            BPrefixAt0                                                                            0    1      0                                          DCBAZZZZ                                                                              BNeed6At4                                                                            BNeed2Code                                                                            0xFE 1      1                                          ZZZZZZZZ                                                                              BlkDataAt0                                                                           BPrefixAt0                                                                            0    0      1                                          ZZZZZZZZ                                                                              BlkDataAt2                                                                           BPrefixAt2                                                                            0    0      1                                          ZZZZZZZZ                                                                              BlkDataAt4                                                                           BPrefixAt4                                                                            0    0      1                                          ZZZZZZZZ                                                                              BlkDataAt6                                                                           BPrefixAt6                                                                            0    0      1                                          __________________________________________________________________________

Generation of Quantization Matrices

The procedure for generating the 32 quantization matrices(Qmatrix[2][16][8][8]) from the two base matrices (Base[2][8][8]), thefive quantization parameters (QuantStart, QuantStep, DCstep, Tilt[0],and Tilt[1]), and the PowersOf2 flag is specified by the following Ccomputer language code:

    __________________________________________________________________________    for (k=0; k<2; k++)  / / for each of inter, intra base matrices               / / Apply tilt to base matrix                                                 for (j=0; j<8; j++)                                                                  for (i=0; i<8; i++)                                                               Base[k] [j] [i] = (Base[k] [j] [i] *                                                      (32 + (i+j)*(Tilt[k]-32)/32))/32;                      / / Generate the 16 quantization matrices of this type                        for (m=0; m<16; m++)                                                          {                                                                                    for (j=0; j<8; j++)                                                           {                                                                                 for (i=0; i<8; i++)                                                           {                                                                                 if (i==0 && j==0 && k==1)                                                         s = DCstep;                                                               else                                                                              s = QuantStep;                                                            q = (Base[k] [j] [i] *                                                            (QuantStart + ((s*m)>>2))) >> 6;                                          if (q<2) q=2;                                                                 if (q>127) q=127;                                                             if (PowersOf2)                                                                    q = Round2[q];                                                            else                                                                              q = q > > 1;                                                              Qmatrix[k] [m] [j] [i] = q;                                               }                                                                         }                                                                      }                                                                             }                                                                             __________________________________________________________________________

where Round2[] is a lookup table that divides by two and rounds to thenearest power of two, as follows:

    ______________________________________                                        Round2[] =                                                                     0,        0,     1,      2,   2,   2,   4,   4                                4,        4,     4,      4,   8,   8,   8,   8,                               8,        8,     8,      8,   8,   8,   8,  16,                              16,       16,    16,     16,  16,  16,  16,  16,                              16,       16,    16,     16,  16,  16,  16,  16,                              16,       16,    16,     16,  16,  16,  32,  32,                              32,       32,    32,     32,  32,  32,  32,  32,                              32,       32,    32,     32,  32,  32,  32,  32,                              32,       32,    32,     32,  32,  32,  32,  32,                              32,       32,    32,     32,  32,  32,  32,  32,                              32,       32,    32,     32,  32,  32,  32,  32,                              32,       32,    32,     64,  64,  64,  64,  64,                              64,       64,    64,     64,  64,  64,  64,  64,                              64,       64,    64,     64,  64,  64,  64,  G4,                              64,       64,    64,     64,  64,  64,  64,  64,                              64,       64,    64,     64,  64,  64,  64,  64                               };                                                                            ______________________________________                                    

The encoder may use the PowersOf2 option to make the compressed videobitstream easier to encode and decode, since, when the PowersOf2 flag is1, all quantization and dequantization may be implemented with bitshifts.

The Tilt[] parameters tilt the main diagonal of the base matrices, thuschanging how heavily or lightly high-frequency coefficients arequantized, relative to low-frequency coefficients. A tilt value of 32applies no tilt, and leaves the base matrix unchanged. Tilt values lessthan 32 decrease high-frequency quantization, and tilt values greaterthan 32 increase high-frequency quantization.

Once the base matrices have been tilted, the 16 quantization matrices ofeach type are computed as multiples of the base matrix. The QuantStartand QuantStep parameters provide control over both the absolutemultiplier as well as the "spread" between the 16 matrices. The DC termin the intra matrices has a separate DCstep parameter since its valuemay need to be spread differently from the rest of the terms.

The default values for the five quantization parameters are as follows:

QuantStart=30

QuantStep=36

DCstep=8

Tilt [0]=Tilt [1]=32

PowersOf2 =1

The default values for the inter and intra base matrices are as follows:

    ______________________________________                                        Inter:                                                                                 8      8      8    8     9    9   10   10                                     8      8      8    9     9   10   10   11                                     8      8      8    9    10   11   11   12                                     8      9      9   10    10   11   12   13                                     9      9     10   10    11   12   12   14                                     9     10     11   11    11   12   13   15                                    10     10     11   12    13   13   14   15                                    10     11     12   13    14   15   15   16                            Intra:                                                                                 6      8      9   11    13   13   14   17                                     8      8     11   12    13   14   17   18                                     9     11     13   13    14   17   17   19                                    11     11     13   13    14   17   18   20                                    11     13     13   14    16   17   20   24                                    13     13     14   16    17   20   24   29                                    13     13     14   17    19   23   28   34                                    13     14     17   19    23   28   34   41                            ______________________________________                                    

It will be further understood that various changes in the details,materials, and arrangements of the parts which have been described andillustrated in order to explain the nature of this invention may be madeby those skilled in the art without departing from the principle andscope of the invention as expressed in the following claims.

What is claimed is:
 1. A computer-implemented process for encoding videosignals, comprising the steps of:(a) generating a plurality ofquantization matrices using one or more quantization matrix parameters;(b) encoding video signals using the quantization matrices to generateencoded video signals; and (c) generating an encoded bit streamcomprising the encoded video signals and the quantization matrixparameters.
 2. The process of claim 1, wherein step (a) comprises thestep of generating the quantization matrices using at least one basematrix.
 3. The process of claim 2, wherein the encoded bit streamcomprises a flag indicating whether the base matrix is a default basematrix.
 4. The process of claim 2, wherein:step (a) comprises the stepof generating the quantization matrices using the base matrix and a tiltparameter; and the encoded bit stream comprises the tilt parameter. 5.The process of claim 2, wherein:step (a) comprises the step ofgenerating the quantization matrices using the base matrix, aquantization start parameter, and a quantization step parameter; and theencoded bit stream comprises the quantization start parameter and thequantization step parameter.
 6. The process of claim 5, wherein:step (a)comprises the step of generating a plurality of intraframe quantizationmatrices using the base matrix, the quantization start parameter, thequantization step parameter, and a DC coefficient step parameter; andthe encoded bit stream further comprises the DC coefficient stepparameter.
 7. The process of claim 2, wherein:step (b) comprises thestep of quantizing the video signals using bit shifts; and the encodedbit stream comprises a flag indicating whether dequantization may beimplemented using bit shifts.
 8. The process of claim 1, wherein:step(a) comprises the steps of:(1) generating a plurality of intraframequantization matrices using an intraframe base matrix, an intraframetilt parameter, a quantization start parameter, a quantization stepparameter, and a DC step parameter; and (2) generating a plurality ofinterframe quantization matrices using an interframe base matrix, aninterframe tilt parameter, the quantization start parameter, and thequantization step parameter; step (b) comprises the step of encoding thevideo signals using the intraframe quantization matrices and theinterframe quantization matrices; and the encoded bit stream comprises:aflag indicating whether the base matrix is a default base matrix; thequantization start parameter; the quantization step parameter; the DCcoefficient step parameter; the interframe tilt parameter; theintraframe tilt parameter; and a flag indicating whether dequantizationmay be implemented using bit shifts.
 9. The process of claim 8, whereinthe encoded bit stream comprises:a 6-bit QuantStart parameter; a 6-bitQuantStep parameter; a 6-bit DCstep parameter; a 6-bit Tilt[0]parameter; a 6-bit Tilt[1] parameter; and a 1-bit PowersOf2 parameter.10. The process of claim 9, wherein the encoded bit stream furthercomprises:a 384-bit interframe base matrix; and a 384-bit intraframebase matrix.
 11. An apparatus for encoding video signals, comprising:(a)means for generating a plurality of quantization matrices using one ormore quantization matrix parameters; (b) means for encoding videosignals using the quantization matrices to generate encoded videosignals; and (c) means for generating an encoded bit stream comprisingthe encoded video signals and the quantization matrix parameters. 12.The apparatus of claim 11, wherein means (a) comprises means forgenerating the quantization matrices using at least one base matrix. 13.The apparatus of claim 12, wherein the encoded bit stream comprises aflag indicating whether the base matrix is a default base matrix. 14.The apparatus of claim 12, wherein:means (a) comprises means forgenerating the quantization matrices using the base matrix and a tiltparameter; and the encoded bit stream comprises the tilt parameter. 15.The apparatus of claim 12, wherein:means (a) comprises means forgenerating the quantization matrices using the base matrix, aquantization start parameter, and a quantization step parameter; and theencoded bit stream comprises the quantization start parameter and thequantization step parameter.
 16. The apparatus of claim 15,wherein:means (a) comprises means for generating a plurality ofintraframe quantization matrices using the base matrix, the quantizationstart parameter, the quantization step parameter, and a DC coefficientstep parameter; and the encoded bit stream further comprises the DCcoefficient step parameter.
 17. The apparatus of claim 12, wherein:means(b) comprises means for quantizing the video signals using bit shifts;and the encoded bit stream comprises a flag indicating whetherdequantization may be implemented using bit shifts.
 18. The apparatus ofclaim 11, wherein:means (a) comprises:(1) means for generating aplurality of intraframe quantization matrices using an intraframe basematrix, an intraframe tilt parameter, a quantization start parameter, aquantization step parameter, and a DC step parameter; and (2) means forgenerating a plurality of interframe quantization matrices using aninterframe base matrix, an interframe tilt parameter, the quantizationstart parameter, and the quantization step parameter; means (b)comprises means for encoding the video signals using the intraframequantization matrices and the interframe quantization matrices; and theencoded bit stream comprises:a flag indicating whether the base matrixis a default base matrix; the quantization start parameter; thequantization step parameter; the DC coefficient step parameter; theinterframe tilt parameter; the intraframe tilt parameter; and a flagindicating whether dequantization may be implemented using bit shifts.19. The apparatus of claim 18, wherein the encoded bit streamcomprises:a 6-bit QuantStart parameter; a 6-bit QuantStep parameter; a6-bit DCstep parameter; a 6-bit Tilt[0] parameter; a 6-bit Tilt[1]parameter; and a 1-bit PowersOf2 parameter.
 20. The apparatus of claim19, wherein the encoded bit stream further comprises:a 384-bitinterframe base matrix; and a 384-bit intraframe base matrix.
 21. Theapparatus of claim 18, wherein the apparatus is connected to a bus andthe bus is further connected to a memory device.
 22. The apparatus ofclaim 11, wherein the apparatus is connected to a bus and the bus isfurther connected to a memory device.
 23. A computer-implemented processfor decoding video signals, comprising the steps of:(a) providing anencoded bit stream comprising encoded video signals and one or morequantization matrix parameters; (b) generating a plurality ofquantization matrices using the quantization matrix parameters; and (c)decoding the encoded video signals using the quantization matrices togenerate decoded video signals.
 24. The process of claim 23, whereinstep (b) comprises the step of generating the quantization matricesusing at least one base matrix.
 25. The process of claim 24, wherein theencoded bit stream comprises a flag indicating whether the base matrixis a default base matrix.
 26. The process of claim 24, wherein:theencoded bit stream comprises a tilt parameter; and step (b) comprisesthe step of generating the quantization matrices using the base matrixand the tilt parameter.
 27. The process of claim 24, wherein:the encodedbit stream comprises a quantization start parameter and a quantizationstep parameter; and step (b) comprises the step of generating thequantization matrices using the base matrix, the quantization startparameter, and the quantization step parameter.
 28. The process of claim27, wherein:the encoded bit stream further comprises a DC coefficientstep parameter; and step (b) comprises the step of generating aplurality of intraframe quantization matrices using the base matrix, thequantization start parameter, the quantization step parameter, and theDC coefficient step parameter.
 29. The process of claim 24, wherein:theencoded bit stream comprises a flag indicating whether dequantizationmay be implemented using bit shifts; and step (c) comprises the step ofdequantizing the encoded video signals using bit shifts.
 30. The processof claim 23, wherein:the encoded bit stream comprises:a flag indicatingwhether the base matrix is a default base matrix; the quantization startparameter; the quantization step parameter; the DC coefficient stepparameter; the interframe tilt parameter; the intraframe tilt parameter;and a flag indicating whether dequantization may be implemented usingbit shifts; step (b) comprises the steps of:(1) generating a pluralityof intraframe quantization matrices using an intraframe base matrix, theintraframe tilt parameter, the quantization start parameter, thequantization step parameter, and the DC step parameter; and (2)generating a plurality of interframe quantization matrices using aninterframe base matrix, the interframe tilt parameter, the quantizationstart parameter, and the quantization step parameter; and step (c)comprises the step of decoding the encoded video signals using theintraframe quantization matrices and the interframe quantizationmatrices.
 31. The process of claim 30, wherein the encoded bit streamcomprises:a 6-bit QuantStart parameter; a 6-bit QuantStep parameter; a6-bit DCstep parameter; a 6-bit Tilt[0] parameter; a 6-bit Tilt[1]parameter; and a 1-bit PowersOf2 parameter.
 32. The process of claim 31,wherein the encoded bit stream further comprises:a 384-bit interframebase matrix; and a 384-bit intraframe base matrix.
 33. An apparatus fordecoding video signals, comprising:(a) means for providing an encodedbit stream comprising encoded video signals and one or more quantizationmatrix parameters; (b) means for generating a plurality of quantizationmatrices using the quantization matrix parameters; and (c) means fordecoding the encoded video signals using the quantization matrices togenerate decoded video signals.
 34. The apparatus of claim 33, whereinmeans (b) comprises means for generating the quantization matrices usingat least one base matrix.
 35. The apparatus of claim 34, wherein theencoded bit stream comprises a flag indicating whether the base matrixis a default base matrix.
 36. The apparatus of claim 34, wherein:theencoded bit stream comprises a tilt parameter; and means (b) comprisesmeans for generating the quantization matrices using the base matrix andthe tilt parameter.
 37. The apparatus of claim 34, wherein:the encodedbit stream comprises a quantization start parameter and a quantizationstep parameter; and means (b) comprises means for generating thequantization matrices using the base matrix, the quantization startparameter, and the quantization step parameter.
 38. The apparatus ofclaim 37, wherein:the encoded bit stream further comprises a DCcoefficient step parameter; and means (b) comprises means for generatinga plurality of intraframe quantization matrices using the base matrix,the quantization start parameter, the quantization step parameter, andthe DC coefficient step parameter.
 39. The apparatus of claim 34,wherein:the encoded bit stream comprises a flag indicating whetherdequantization may be implemented using bit shifts; and means (c)comprises means for dequantizing the encoded video signals using bitshifts.
 40. The apparatus of claim 1, wherein:the encoded bit streamcomprises:a flag indicating whether the base matrix is a default basematrix; the quantization start parameter; the quantization stepparameter; the DC coefficient step parameter; the interframe tiltparameter; the intraframe tilt parameter; and a flag indicating whetherdequantization may be implemented using bit shifts; means (b)comprises:(1) means for generating a plurality of intraframequantization matrices using an intraframe base matrix, the intraframetilt parameter, the quantization start parameter, the quantization stepparameter, and the DC step parameter; and (2) means for generating aplurality of interframe quantization matrices using an interframe basematrix, the interframe tilt parameter, the quantization start parameter,and the quantization step parameter; and means (c) comprises means fordecoding the encoded video signals using the intraframe quantizationmatrices and the interframe quantization matrices.
 41. The apparatus ofclaim 40, wherein the encoded bit stream comprises:a 6-bit QuantStartparameter; a 6-bit QuantStep parameter; a 6-bit DCstep parameter; a6-bit Tilt[0] parameter; a 6-bit Tilt[1] parameter; and a 1-bitPowersOf2 parameter.
 42. The apparatus of claim 41, wherein the encodedbit stream further comprises:a 384-bit interframe base matrix; and a384-bit intraframe base matrix.
 43. The apparatus of claim 40, whereinthe apparatus is connected to a bus and the bus is further connected toa memory device.
 44. The apparatus of claim 33, wherein the apparatus isconnected to a bus and the bus is further connected to a memory device.